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