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

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

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

但是我收到以下错误

Communication with the underlying transaction manager has failed.

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

enter image description here

enter image description here

但仍然出现同样的错误。

这是完整的堆栈跟踪

Message: System.Transactions.TransactionManagerCommunicationException: Communication with the underlying transaction manager has failed. ---> System.Runtime.InteropServices.COMException: The MSDTC transaction manager was unable to pull the transaction from the source transaction manager due to communication problems. Possible causes are: a firewall is present and it doesn't have an exception for the MSDTC process, the two machines cannot find each other by their NetBIOS names, or the support for network transactions is not enabled for one of the two transaction managers. (Exception from HRESULT: 0x8004D02B) at System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid& transactionIdentifier, OletxTransactionIsolationLevel& isolationLevel, ITransactionShim& transactionShim) at System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[] propagationToken)

请多多指教

最佳答案

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

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

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

希望有帮助。

关于sql-server - 由于通信问题,MSDTC 事务管理器无法从源事务管理器中提取事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25862509/

相关文章:

sql - 事务不因 PK 违规而回滚

java - 一个上游事件包含多个项目,如何以事务方式设置 Spring 集成管道

Windows 2008 服务器上的 MySQL 5(32 位)

SQL 查询用于在 SQL Server 中生成类似输出查询相关表的矩阵

sql - 按日期选择出现次数最多的记录

sql-server - 尝试编辑表时出现 SQL Server Management Studio 错误

java - 将 spring 事务传播到兄弟调用

c# - 无法使用 Excel Interop 安排程序

windows - Windows Server 2008 支持 MSDE 吗?

sql - 如何检查变量在 SQL Server 2008 存储过程中是否有值