日期:2014-05-18  浏览次数:20881 次

请教一个关于分布式事务的问题.
想实现一个简单的分布式事务,代码如下:
C# code

string connectionStringServer = ConfigurationManager.AppSettings["ConnectionStringServer"].ToString();
        string connectionStringLocal = ConfigurationManager.AppSettings["ConnectionStringLocal"].ToString();
        int returnValue = 0;
        string strCommand = "insert into [Users](UserName,UserPhone) values(@name,@phone)";
        StringWriter writer = new StringWriter();
        using (TransactionScope scope = new TransactionScope())
        {
            using (SqlConnection cn1 = new SqlConnection(connectionStringServer))
            {
                try
                {
                    cn1.Open();
                    SqlCommand cmd1 = new SqlCommand(strCommand, cn1);
                    cmd1.Parameters.Add("@name", SqlDbType.VarChar).Value = txtName.Text;
                    cmd1.Parameters.Add("@phone", SqlDbType.VarChar).Value = txtPhoneNumber.Text;
                    returnValue = cmd1.ExecuteNonQuery();
                    writer.WriteLine("插入远程数据库表时影响行数:{0}", returnValue);

                    using (SqlConnection cn2 = new SqlConnection(connectionStringLocal))
                    {
                        try
                        {
                            cn2.Open();
                            SqlCommand cmd2 = new SqlCommand(strCommand, cn2);
                            cmd2.Parameters.Add("@name", SqlDbType.VarChar).Value = txtName.Text;
                            cmd2.Parameters.Add("@phone", SqlDbType.VarChar).Value = txtPhoneNumber.Text;
                            returnValue = 0;
                            returnValue = cmd2.ExecuteNonQuery();
                            writer.WriteLine("插入本地数据库表时影响行数:{0}", returnValue);
                            
                        }
                        catch (Exception ex)
                        {
                            writer.WriteLine("插入本地数据库表时影响行数:{0}", returnValue);
                            writer.WriteLine("插入本地数据库表异常信息:{0}", ex.Message);
                        }
                    }

                }
                catch(Exception ex)
                {
                    writer.WriteLine("插入远程数据库表时影响行数:{0}", returnValue);
                    writer.WriteLine("插入远程数据库表异常信息:{0}", ex.Message);
                }
            }
            scope.Complete();
        }
        if (returnValue > 0)
        {
            writer.WriteLine("事务已经提交.");
        }
        else
        {
            writer.WriteLine("事务已经回滚.");
        }
        Response.Write(writer);


当执行的时候出现"已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问"异常,两边都是SQL Server 2000,而且都已经设置过了MSDTC,但始终没有解决问题,查了一下MSDN,原文是"只有一起使用 SQL Server 的 .NET Framework 数据提供程序 (SqlClient) 和 SQL Server 2005 时,才可以使用可提升事务。",请问各位问题到底出在哪里.

------解决方案--------------------
还解决不了,帮你顶下,学习了!!!!
------解决方案--------------------
探讨
还解决不了,帮你顶下,学习了!!!!

------解决方案--------------------
这个问题我想我可以帮你.我遇到跟你类似的问题,当时搞得焦头烂额.

1.两台计算机启用msdtc,这个你已经做了.
2.在msdtc那里,你仔细查看网络安全那块,顺便选择好允许入站和出站
3.两台计算机的工作组要一致,IP尽量靠在一起(这个很奇怪,如果IP一台是2,另一台是3,相差不大的情况下,工作组名称可以不一致)
4.应该已经解决了.
你可以到网上去down一个,检测两台计算机的msdtc是否设置好的工具测试.这个软件的名称我忘记了.