【问题标题】:The MSDTC transaction manager was unable to pull the transaction from the source transaction manager due to communication problems由于通信问题,MSDTC 事务管理器无法从源事务管理器中提取事务
【发布时间】:2014-11-09 20:00:04
【问题描述】:

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

但我得到以下错误

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

我用谷歌搜索了一个帖子,其中提到这是 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 managedIdentifier, Guid& transactionIdentifier, OletxTransactionIsolationLevel&isolationLevel, ITransactionShim& transactionShim) 在 System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[] propagationToken)

请多指教

【问题讨论】:

  • 我有时在 Windows 2088 中遇到同样的问题,我不知道如何解决。它有时会发生。 :(
  • 您是否尝试在应用服务器上也设置它?您正在配置入站/出站。它解决了我的问题。

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


【解决方案1】:

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

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

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

希望对你有帮助。

【讨论】:

  • #1 发生在两个不同的网络中。它有助于解决它。谢谢
  • 在虚拟机上出现问题,因为在它上面发生了 #1 并且它得到了错误的 ip,设置其网络配置并使用 ping 仔细检查 ip 解决了我的问题。
【解决方案2】:

检查事项:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这不是一个解决方案,它的作用是它基本上永远不会在提升的事务中登记连接,这意味着在一台服务器或数据库发生故障后,祝你好运回滚(如果你在一个事务中对多个数据库运行操作)。
    【解决方案4】:

    我错过了很多东西:

    1. 无身份验证(作为DB服务器和APP服务器,不在同一个AD域内)
    2. Rule to Windows Firewall 启用 msdtc.exe
    3. Rule to firewall between DMZ and internal zone TCP 135,1024-65535 双向。该链接告诉您如何将防火墙策略限制为仅几个端口。
    4. hosts 或共享 DNS 服务器的短/长服务器名称。例如。 192.168.1.1 app1 以及 192.168.1.1 app1.domain.local

    另一方面,基于此link,我的设置不需要:

    • 允许远程客户端
    • 允许远程管理
    • 启用 XA 事务(在 Windows Server 2003 SP1 之前需要)

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-09
        相关资源
        最近更新 更多