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

问题描述 投票:11回答:3

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

但我得到了以下错误

“与基础交易经理的沟通失败了。”

我用Google搜索并发现一个帖子,其中提到了DTC(分布式事务)的问题我在server2(DB服务器)上启用了DTC,并在防火墙中对它进行了例外处理。

但仍然是同样的错误。

这是完整的堆栈跟踪

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

好心劝告

sql-server transactions windows-server-2008 windows-server-2003 msdtc
3个回答
16
投票

我们有完全相同的情况,不止一次。每次都是以下之一:

  1. 服务器的DNS中的IP地址已过时(如错误消息中所述:“两台计算机无法通过其NetBIOS名称找到彼此”)。您可以通过在命令提示符中将ping servername从一个服务器尝试到另一个服务器来检查是否是这种情况。如果按名称ping失败并且IP成功ping(或按名称ping返回错误的IP),则应该与系统管理员联系以查看DNS / DHCP。
  2. 服务器创建为预配置服务器的映像(例如,如果您正在使用虚拟机,而不是为每个服务器执行全新安装,则只需克隆映像)。这是一个问题,因为DTC具有内部“标识符” - 并且在图像克隆的情况下,您的安装现在具有相同的DTC ID,并且将无法彼此通信。解决方案是再次卸载并安装DTC。

希望能帮助到你。


1
投票

要检查的事项:

  • 您是否在两台服务器上完成了此配置?
  • 两个服务器都是同一个域的成员吗?
  • 你检查了事件日志吗?

1
投票

连接到远程SQl服务器时遇到了同样的问题。在我的情况下,解决方案是将"enlist=false"添加到连接字符串。

© www.soinside.com 2019 - 2024. All rights reserved.