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

时间:2014-09-16 07:02:43

标签: sql-server transactions windows-server-2008 windows-server-2003 msdtc

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

但我得到了以下错误

“与底层交易管理器的通信失败。”

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

enter image description here

enter image description here

但仍然是同样的错误。

这是完整的堆栈跟踪

  

消息: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)

请咨询

4 个答案:

答案 0 :(得分:15)

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

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

  2. 将服务器创建为预配置服务器的映像(例如,如果您正在使用虚拟机,而不是为每个服务器执行全新安装,则只需克隆映像)。这是一个问题,因为DTC有一个内部"标识符" - 在图像克隆的情况下,您的安装现在都具有相同的DTC ID,并且无法相互通信。解决方案是再次卸载并安装DTC。

  3. 希望它有所帮助。

答案 1 :(得分:1)

要检查的事项:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在将远程IP \计算机名称添加到服务器上的文件后解决: 主机,lmhosts 在文件夹中 C:\ Windows \ System32 \ drivers \ etc