我在服务器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)
请咨询
答案 0 :(得分:15)
我们有完全相同的情况,不止一次。每次都是以下之一:
服务器的DNS中的IP地址已过时(如错误消息中所述:" 两台计算机无法通过其NetBIOS名称找到彼此") 。您可以通过在命令提示符中将ping servername
从一个服务器尝试到另一个服务器来检查是否是这种情况。如果按名称ping失败并且IP成功ping(或按名称ping返回错误的IP),则应该与系统管理员联系以查看DNS / DHCP。
将服务器创建为预配置服务器的映像(例如,如果您正在使用虚拟机,而不是为每个服务器执行全新安装,则只需克隆映像)。这是一个问题,因为DTC有一个内部"标识符" - 在图像克隆的情况下,您的安装现在都具有相同的DTC ID,并且无法相互通信。解决方案是再次卸载并安装DTC。
希望它有所帮助。
答案 1 :(得分:1)
要检查的事项:
答案 2 :(得分:0)
在连接到远程SQl服务器时,我遇到了同样的问题。
在我的情况下,解决方案是在连接字符串中添加"enlist=false"
。
答案 3 :(得分:0)
在将远程IP \计算机名称添加到服务器上的文件后解决: 主机,lmhosts 在文件夹中 C:\ Windows \ System32 \ drivers \ etc