在使用TransactionScope时 出错。
以下是使用TransactionScope 这个的测试代码一周了,问题仍然没有解决,希望大家指教。
应用程序服务器与数据库服务器分别在不同的机器上。
string connectionString = @"Data Source=server\sql2005;Initial Catalog=DataTest;User ID=sa;Password=123456;enlist=true";
           using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
            {
                SqlParameter[] parameters =
                {
                    new SqlParameter("@UserName", SqlDbType.NVarChar,50),
                    new SqlParameter("@Fund", SqlDbType.Money)
                };
                parameters[0].Value = "admin";
                parameters[1].Value = 12.0;
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "User_UpdateFund";
                    cmd.Parameters.AddRange(parameters);
                    conn.Open();
                    cmd.ExecuteNonQuery();                                       
                }
                using (SqlConnection conn1 = new SqlConnection(connectionString))
                {
                    SqlParameter[] parameters1 =
                            {
                                new SqlParameter("@From", SqlDbType.NVarChar,50),
                                new SqlParameter("@To",SqlDbType.NVarChar,50),
                                new SqlParameter("@Fund", SqlDbType.Money)
                            };
                    parameters1[0].Value = "admin";
                    parameters1[1].Value = "agent";
                    parameters1[2].Value = 12.0;
                    SqlCommand cmd1 = new SqlCommand();
                    cmd1.Connection = conn1;
                    cmd1.CommandType = CommandType.StoredProcedure;
                    cmd1.CommandText = "FundLog_Add";
                    cmd1.Parameters.AddRange(parameters1);
                    conn1.Open();
                    cmd1.ExecuteNonQuery();
                }
                ts.Complete();
Posted on 2007-08-05 13:34 rosanshao 阅读(3379) 评论(19)  编辑 收藏 网摘

Feedback

#1楼   回复  引用    

2007-08-05 20:12 by rui[未注册用户]
msdtc服务没有启动,可以看看这里的设置,http://www.cnblogs.com/zhang3533/archive/2007/07/15/818604.html

#2楼[楼主]   回复  引用  查看    

2007-08-05 21:15 by rosanshao      
未处理 System.Transactions.TransactionManagerCommunicationException
Message="与基础事务管理器的通信失败。"
Source="System.Transactions"
StackTrace:
在 System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[] propagationToken)
在 System.Transactions.TransactionStatePSPEOperation.PSPEPromote(InternalTransaction tx)
在 System.Transactions.TransactionStateDelegatedBase.EnterState(InternalTransaction tx)
在 System.Transactions.EnlistableStates.Promote(InternalTransaction tx)
在 System.Transactions.Transaction.Promote()
在 System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transaction transaction)
在 System.Transactions.TransactionInterop.GetExportCookie(Transaction transaction, Byte[] whereabouts)
在 System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx)
在 System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx)
在 System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction)
在 System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction)
在 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
在 System.Data.SqlClient.SqlConnection.Open()
在 TransactionScopteConsole.Test.Add() 位置 C:\Documents and Settings\Administrator\桌面\事务测试\TransactionScopteConsole\Test.cs:行号 49
在 TransactionScopteConsole.Test.Run() 位置 C:\Documents and Settings\Administrator\桌面\事务测试\TransactionScopteConsole\Test.cs:行号 27
在 TransactionScopteConsole.Program.Main(String[] args) 位置 C:\Documents and Settings\Administrator\桌面\事务测试\TransactionScopteConsole\Program.cs:行号 17
在 System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()

#3楼   回复  引用  查看    

2007-08-05 22:07 by Nineteen@newsmth      
各位别猜了,楼主百分百没有配置msdtc的安全配置。

不是忘了启动Network DTC Access,就是忘了Client And Administration,要不就是忘了设置Transaction Manager Communication.

btw:TransactionScope是垃圾,N宗罪。建议楼主还是用CommittableTransaction手工Enlist吧。另,鉴于FW2.0的SQLClient有俩致命bug在分布式事务上(不知道那俩补丁公开了没有),没事还是尽量避免分布式事务吧。

#4楼   回复  引用  查看    

2007-08-06 09:31 by Nineteen@newsmth      
@rosanshao
只能使用一个Connection对象,不能使用两个,说明你的本地事务在提升成分布式事务时失败.

从微软下个DTCPing,先排查排查.

btw:应用程序服务器/Connection对应的服务器,这些所有的MSDTC配置都确认过?

#5楼   回复  引用    

2007-08-06 09:55 by rosanshao[未注册用户]
to Nineteen@newsmth
我确认应用程序服务器/Connection对应的服务器,这些所有的MSDTC都配置过,具体的配置我是按照http://www.cnblogs.com/zhang3533/archive/2007/07/15/818604.html  其他的配置也试过些,都是在第二connection Open时出现的这个错误,能不能具体说明一下,要实现分布式事务MSDTC怎么配置。如果这样
string connectionString = @"Data Source=server\sql2005;Initial Catalog=DataTest;User ID=sa;Password=123456;enlist=true";
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
SqlParameter[] parameters =
{
new SqlParameter("@UserName", SqlDbType.NVarChar,50),
new SqlParameter("@Fund", SqlDbType.Money)
};
parameters[0].Value = "admin";
parameters[1].Value = 12.0;
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "User_UpdateFund";
cmd.Parameters.AddRange(parameters);
conn.Open();
cmd.ExecuteNonQuery();
} ts.Complete();
}测试是通过了的。加上第二个Connection时就出现错误。

#6楼   回复  引用  查看    

2007-08-06 10:30 by qy1141      
楼主问题找到了吗?我也遇到了相同的问题,数据库服务器是在公司另一个网段上的,在事务中使用一个连接没有问题,使用两个连接就会出现"与基础事务管理器的通信失败"的异常,但奇怪的是如果用我同事的电脑做数据库服务器,(同事电脑和我的电脑在同一个网段)就没有问题,一切都能通过了,疑惑中....

#7楼   回复  引用    

2007-08-06 10:40 by zhouzhou[未注册用户]
确保2台机器可以使用机器名互相访问(ip不算,修改hosts文件也不算)!
这是个很BT的问题,哈哈。

#8楼   回复  引用  查看    

2007-08-06 11:18 by Nineteen@newsmth      
@rosanshao
DTCPing去测试一下.

你要确认所有服务器之间都可以通过机器名访问.晚上blog一把关于分布式事务和TransactionScope,来看偶的blog吧:)

#9楼   回复  引用  查看    

2007-08-06 11:18 by Nineteen@newsmth      
@zhouzhou
修改hosts文件算.

#10楼   回复  引用  查看    

2007-08-06 14:23 by qy1141      
楼主,我的问题已经找到,出错原因是本地计算机与数据库服务器之间Telnet端口135或RPC被禁用,MSDTC服务升级为分布式事务时是依赖于RPC的.
用 Telnet IP 135 在你本地连接数据库服务器,同样,在数据库服务器连接你的机器,检查是否可以连通

如果,有一端不能连通,找你们公司的网管将不能连通的那一端的Telnet端口打开,并允许RPC协议.

我的问题就这么解决的,)_(

#11楼   回复  引用    

2007-08-06 15:52 by rosanshao[未注册用户]
qy1141 你的联系方式是什么,QQ是多少?
我的配置 telnet ip 135是都是通的,但是还是不行。RPC也启用了的。

#12楼   回复  引用    

2007-08-09 17:28 by cokkiy[未注册用户]
Most is MSDTC Secuity Config problem.If you config all right,be sure your two computer in the same Workgroup.IT'S VERY IMNPORTANT.

#13楼[楼主]   回复  引用  查看    

2007-08-11 14:29 by rosanshao      
The two computer is not in the same Workgroup.没有在同一工作组就不行吗?

#14楼[楼主]   回复  引用  查看    

2007-08-11 16:43 by rosanshao      
RPC test is successful
++++++++++++RPC test completed+++++++++++++++
++++++++++++Start DTC Binding Test +++++++++++++
Trying Bind to zdit
Received reverse bind call from zdit
Binding success: ZDIT-SP01-->zdit
++++++++++++DTC Binding Test END+++++++++++++
++++++++++++Start Reverse Bind Test+++++++++++++
Received Bind call from zdit
Trying Reverse Bind to zdit
Reverse Binding success: ZDIT-SP01-->zdit
现在两台机器已经想到能够Ping通了,但是使用了两个Connection仍然失败。难道就只能使用一个Connection吗?

#15楼   回复  引用  查看    

2007-11-20 20:27 by Weck      
不晓得你现在解决了没?我也遇到了同样的问题.汗...

#16楼   回复  引用  查看    

2007-11-24 20:23 by Weck      
真是奇怪,PetShop用了两个Sqlconnection可以

#17楼[楼主]   回复  引用  查看    

2008-01-09 09:36 by rosanshao      
问题已经解决了。问题出在哪儿,也不清楚。

#18楼   回复  引用    

2008-07-22 09:54 by zzyzzl[未注册用户]
http://www.cnblogs.com/zhang3533/archive/2007/07/15/818604.html

----------
我把卡巴斯基关闭,然后按照这篇做了安全设置 就好了



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 843678




相关文章:

相关链接: