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

时间:2011-08-17 09:42:40

标签: c# sql-server transactions transactionscope msdtc

DTCPing工具说一切都应该没问题。实际的例外是:

System.Transactions.TransactionManagerCommunicationException:
     

与基础事务管理器的通信失败。 --->   System.Runtime.InteropServices.COMException:MSDTC事务   经理无法将交易推送到目的地   交易经理因沟通问题。可能的原因   是:存在防火墙,它没有例外   在MSDTC过程中,两台机器无法通过它们找到对方   未启用NetBIOS名称或对网络事务的支持   对于两个交易经理之一。 (HRESULT的例外情况:   0x8004D02A)

该服务在VM上运行。其他服务器可以运行分布式事务,因此DB框配置正确。

2 个答案:

答案 0 :(得分:3)

这里有一篇关于这个主题的好文章:Troubleshooting Problems with 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或加密技术。我记得这可能会导致问题。

答案 1 :(得分:2)

有人已经提到了唯一的ID,确保你在做其他任何事情之前就这样做了,我看到人们在其他路线上爆炸很多时间只是为了找出问题所在。

那就是说,我发现一个名为DTCTester的工具比DTCPing更有用。 http://support.microsoft.com/kb/293799

它比DTCPing更难使用,但它也更接近您通常所要做的测试,从而为您提供更清晰的测试结果。

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

我不能强调这一点,我曾经花了近90分钟试图说服一个cusotmer他的VPN软件充当个人防火墙并阻止来电插座。一旦他禁用它,问题就消失了。 (该软件显然是思科VPN客户端,设置为“状态防火墙(始终开启)” - 是的,它始终在:) :)

请记住,DTC是双向流量,因此双方都必须如此,并且还需要确保两台机器都允许“启用网络DTC访问”。我还发现确保DTC设置为两个盒子同步通常也确保了稳固的交互。