嵌套事务 - MSDTC

时间:2012-11-29 17:01:27

标签: .net transactions msdtc

我在应用程序中设置事务时遇到问题。当我执行轻量级交易时,它可以工作:

using (TransactionScope tx = new TransactionScope())
{
  // Connect to Server 1 in a transaction

  tx.Complete()
}

当我执行嵌套事务时,它会失败:

using (TransactionScope tx = new TransactionScope())
{
  // Connect to Server 1 in a transaction

    using (TransactionScope tx2 = new TransactionScope())
    {
      // Connect to Server 2 in a transaction

      tx2.Complete()
    }

  tx.Complete()
}

我得到的错误是:

 The MSDTC transaction manager was unable to pull the transaction from the source transaction manager due to communication problems. Possible causes are: a firewall is present and it doesn't have an exception for the MSDTC process, the two machines cannot find each other by their NetBIOS names, or the support for network transactions is not enabled for one of the two transaction managers. (Exception from HRESULT: 0x8004D02B)

当我在服务器上运行相同的确切代码时,它可以工作。我在我的计算机上运行/配置了MSDTC(设置与服务器相同)。

我们的网络部门表示他们没有看到防火墙上有任何阻塞的流量。

我可以将DTC从我的计算机Ping到服务器,但不能从服务器返回。

有什么想法吗?我认为这是一个网络问题,但需要一些帮助。

2 个答案:

答案 0 :(得分:0)

  
    

我可以将DTC从我的计算机Ping到服务器,但不能从服务器返回。

  

这似乎是原因。 MSDTC要求两台计算机都可以通过NetBios名称相互查看。您应该能够使用'nbtstat -a xxx.xxx.xxx.xxx'来解析IP以命名两种方式。

还必须在两台机器上打开端口135。

答案 1 :(得分:0)

原来是防火墙问题。感谢。