Dtcping测试通过但仍然与底层事务管理器通信失败。

8

DTCPing工具显示一切都应该正常。实际异常为:

System.Transactions.TransactionManagerCommunicationException:

Communication with the underlying transaction manager has failed. ---> System.Runtime.InteropServices.COMException: The MSDTC transaction manager was unable to push the transaction to the destination 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: 0x8004D02A)

该服务运行在虚拟机上。其他服务器能够运行分布式事务,因此数据库已正确配置。

2个回答

3
这个主题有一篇很好的文章,可以在这里阅读:解决 MSDTC 问题。它最初是为 BizTalk Server 编写的,但也适用于其他服务器。
由于您正在运行 VPC,可能与同一网络上的另一台计算机共享 DTC 的某些标识符。请查看本文中的“确保 MSDTC 分配了唯一的 CID 值”章节(另请参见http://blogs.msdn.com/b/johnlee/archive/2008/09/09/msdtc-on-virtual-machines.aspx),虽然我认为 DTCPing 应该会告诉您相关信息……您还可以尝试使用msdtc -uninstallmsdtc -install来修复此问题。
您还应检查您的服务器是否未使用某些 VPN 或加密技术。我记得这可能会引起问题。

2

有人已经提到了唯一的ID,请确保在执行其他操作之前完成此操作,我见过很多人走其他路线浪费很多时间,最后发现问题就在这里。

话虽如此,我发现一个名为DTCTester的工具比DTCPing更有用。 http://support.microsoft.com/kb/293799

它比DTCPing难用一点,但它测试的结果更接近你通常要做的事情,这给你提供了更清洁的测试结果。

* 确保所有可能的防火墙/过滤软件都被禁用和/或不存在 *

我再次强调,我曾花费将近90分钟试图说服一位客户,他的VPN软件充当个人防火墙并阻止了传入的套接字。 一旦他禁用了它,问题就解决了。(该软件是思科VPN客户端,设置为“状态防火墙(始终开启)”- 是的,它始终开启 :))

请记住,DTC是双向通信,因此这在两侧都必须成立,并且您还需要确保两台计算机都允许“启用网络DTC访问”。 我还发现,确保两个框的DTC设置同步通常也可以确保良好的交互。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接