【问题标题】:Dtcping test passes but still have a Communication with the underlying transaction manager has failedDtcping 测试通过但仍有与底层事务管理器的通信失败
【发布时间】:2011-08-17 09:42:40
【问题描述】:

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

System.Transactions.TransactionManagerCommunicationException:

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

服务在虚拟机上运行。其他服务器能够运行分布式事务,所以 DB box 配置正确。

【问题讨论】:

    标签: c# sql-server transactions transactionscope msdtc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      有人已经提到了唯一 ID,请确保在做其他任何事情之前先这样做,我看到人们花很多时间沿着其他路线走下去,却发现这就是问题所在。

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

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

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

      我怎么强调都不为过,我曾经花了将近 90 分钟试图说服客户他的 VPN 软件充当个人防火墙并阻止传入的套接字。一旦他禁用它,问题就消失了。 (顺便说一下,该软件是 Cisco VPN Client,设置是“状态防火墙(始终开启)” - 是的,它始终开启 :))

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多