由于通信问题,MSDTC 事务管理器无法从源事务管理器中提取事务

2023-12-21

我在服务器 1 上托管了我的 WebApp,在服务器 2 上托管了我的数据库

但我收到以下错误

与底层事务管理器的通信失败。

我google了一下,发现一个帖子提到这是DTC(分布式事务)的问题 我在server2(数据库服务器)上启用了DTC,并在防火墙中对其进行了例外处理。

但仍然是同样的错误。

这是完整的堆栈跟踪

消息:System.Transactions.TransactionManagerCommunicationException:与基础事务管理器的通信失败。 ---> System.Runtime.InteropServices.COMException:由于通信问题,MSDTC 事务管理器无法从源事务管理器中提取事务。可能的原因有:存在防火墙且 MSDTC 进程没有例外、两台计算机无法通过 NetBIOS 名称找到对方,或者两台事务管理器之一未启用对网络事务的支持。 (HRESULT 异常:0x8004D02B) 在System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize,Byte [] propgationToken,IntPtr管理标识符,Guid&transactionIdentifier,OletxTransactionIsolationLevel&isolationLevel,ITransactionShim&transactionShim) 在 System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[]propagationToken)

友善的建议


我们遇到过完全相同的情况,而且不止一次。每次都是以下之一:

  1. 服务器 DNS 中的 IP 地址已过时(如错误消息中所述:“两台机器无法通过 NetBIOS 名称找到对方“)。您可以尝试检查是否是这种情况ping servername在命令提示符下从一台服务器到另一台服务器。如果按名称 ping 失败而按 IP ping 成功(或按名称 ping 返回错误的 IP),那么您应该与系统管理员联系以查看 DNS/DHCP。

  2. 服务器被创建为预配置服务器的映像(例如,如果您正在使用虚拟机,并且无需为每台服务器进行全新安装,只需克隆映像即可)。这是一个问题,因为 DTC 有一个内部“标识符” - 如果进行映像克隆,您的两个安装现在都具有相同的 DTC ID,并且将无法相互通信。解决方法是简单地卸载并重新安装DTC。

希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于通信问题,MSDTC 事务管理器无法从源事务管理器中提取事务 的相关文章

随机推荐