Kevin Li

突破.net极限

导航

这两天尝试使用MS DTC,使用两台电脑安装了两个SQL Server服务器,并编写了一个事务处理组件BankService:
[Transaction(TransactionOption.Required)]
    
public class BankService : System.EnterpriseServices.ServicedComponent
    
{
        
public BankService()
        
{
        }

        
        
public void DrawMoneyFromA(long amount)
        
{
            SqlConnection cn 
= new SqlConnection("Data Source=ekeen;uid=sa;pwd=sa;initial catalog=bank");
            SqlCommand cmd 
= new SqlCommand("update accounts set amount=(amount " + amount.ToString()  + ") where accountid='A'",cn);
            
try
            
{
                cn.Open();
                cmd.ExecuteNonQuery();
            }

            
catch(Exception ex)
            
{
                
throw ex;
            }

            
finally
            
{
                cn.Close();
            }

            

        }


        
public void DepositMoneyToB(long amount)
        
{
            SqlConnection cn 
= new SqlConnection("server=(local);integrated security=true;initial catalog=bank");
            SqlCommand cmd 
= new SqlCommand("update accounts set amount=amount + " + amount.ToString()  + " where accountid='B'",cn);
            cn.Open();
            cmd.ExecuteNonQuery();
            cn.Close();
        }


        [AutoComplete]
        
public void TestDTC()
        
{
            DrawMoneyFromA(
100);
            DepositMoneyToB(
100);
            
            
        }

    }

可是当我调用TestDTC()方法测试DTC时,执行到方法DrawMoneyFromA中的cn.Open方法时却抛出异常“该伙伴事务管理器已经禁止了它对远程/网络事务的支持”,始终没有调试过去,没发现原因
后来,我在组件配置中右击“我的电脑”,选择属性时发现选项卡MSDTC中有一个默认协调器的选项,结果我想是不是应该指定一台电脑作为协调器,于是我就输入了另一台测试机的名字ekeen并确定。结果恶梦就产生了:每次执行事务的时候都会出现错误“COM+ 无法与 Microsoft 分布式事务协调程序交谈”。我想应该是刚才配置错误,可是我当我想再次配置MSDTC的时候,我发现我再也打不开那个选项卡了~~~。
无奈之下就去看了一下事件查看器,发现有一个COM+错误,结果根据信息搜索到了一篇KB文章http://support.microsoft.com/?kbid=867520 ,里面提到了解决方法:
1、删除注册表中的键:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
HKEY_CLASSES_ROOT\CID
2、停止MSDTC服务:net stop msdtc
3、卸载MSDTC服务:msdtc -uninstall
4、重新安装MSDTC服务:msdtc -install
5、重新启动电脑

问题解决了,可以配置MSDTC了,可是“该伙伴事务管理器已经禁止了它对远程/网络事务的支持”的问题还是没解决,不知道谁能帮我一下,谢谢了。

我的操作系统是Windows 2003,数据库是SQL Server 2003 + Sp3