我在服务器 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)
友善的建议
我们遇到过完全相同的情况,而且不止一次。每次都是以下之一:
服务器 DNS 中的 IP 地址已过时(如错误消息中所述:“两台机器无法通过 NetBIOS 名称找到对方“)。您可以尝试检查是否是这种情况ping servername
在命令提示符下从一台服务器到另一台服务器。如果按名称 ping 失败而按 IP ping 成功(或按名称 ping 返回错误的 IP),那么您应该与系统管理员联系以查看 DNS/DHCP。
服务器被创建为预配置服务器的映像(例如,如果您正在使用虚拟机,并且无需为每台服务器进行全新安装,只需克隆映像即可)。这是一个问题,因为 DTC 有一个内部“标识符” - 如果进行映像克隆,您的两个安装现在都具有相同的 DTC ID,并且将无法相互通信。解决方法是简单地卸载并重新安装DTC。
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)