由于通信问题,MSDTC 事务管理器无法将事务推送到目标事务管理器

由于通信问题,MSDTC 事务管理器无法将事务推送到目标事务管理器

我有一台 BizTalk 服务器和一台 SQL 服务器,BizTalk 通过 WCF-SQL 向它们发送消息。BizTalk 服务器已经调用该服务器一年多了,没有出现任何问题。今天早上我来的时候它突然就不能用了(星期五它还在工作)。

调用 WCF-SQL 端点时遇到的完整错误是:

A message sent to adapter "WCF-SQL" on send port "MyPort" with URI "mssql://mySQLServer" is suspended.
Error details: System.Transactions.TransactionManagerCommunicationException: Communication with the underlying transaction manager has failed. ---> System.Runtime.InteropServices.COMException:
The MSDTC transaction manager was unable to push the transaction to the destination 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: 0x8004D02A)
at System.Transactions.Oletx.ITransactionShim.Export(UInt32 whereaboutsSize, Byte[] whereabouts, Int32& cookieIndex, UInt32& cookieSize, CoTaskMemHandle& cookieBuffer)
at System.Transactions.TransactionInterop.GetExportCookie(Transaction transaction, Byte[] whereabouts)

我已遵循以下帖子中的说明: https://stackoverflow.com/questions/29414250/msdtc-on-server-server-is-unavailable

我已经运行msdtc -uninstallmsdtc -install重新启动了该服务几次。

我已重启服务器多次。

我可以使用 Sql Server Management Studio 连接到数据库

尝试从 SQL 服务器连接到 Biztalk 服务器时,DTCPing 会导致(当 DTCPing 在 BizTalk 上运行时):

Problem:fail to invoke remote RPC method
Error(0x6BA) at dtcping.cpp @303
-->RPC pinging exception
-->1722(The RPC server is unavailable.)
RPC test failed

当从 Biztalk 转到 SQL 时,我得到了这个(即使 DTCPing 正在另一端运行)

Please refer to following log file for details:
C:\Temp\DTCPing\myserv.log
Invoking RPC method on dbaditest
RPC test is successful
++++++++++++RPC test completed+++++++++++++++
Please start PING from dbaditest to complete the test

两者都不服务器根本没有运行防火墙

我已经没有什么可以尝试的了。

我可以确认其他服务器/计算机可以连接到 SQL 服务器。因此我不得不假设问题出在 BizTalk 服务器上。

我尝试从 BizTalk Server 连接到网络上的另一个 SQL 服务器,但出现了同样的错误。我差点就放弃重建我的开发环境了 -- 哎呀 :(

我可以从 BizTalk 通过 135 端口 telnet 到 SQL Server,因此没有任何事物阻止它。

DTCTester 的结果是:

tablename= #dtc24449
Creating Temp Table for Testing: #dtc24449
Warning: No Columns in Result Set From Executing: 'create table #dtc24449    (ival int)'
Initializing DTC
Beginning DTC Transaction
Enlisting Connection in Transaction
Error:
SQLSTATE=25S12,Native error=-2147168242,msg='[Microsoft][ODBC SQL Server Driver]Distributed transaction error'
Error:
SQLSTATE=24000,Native error=0,msg=[Microsoft][ODBC SQL Server Driver]Invalid cursor state
Typical Errors in DTC Output When
a.  Firewall Has Ports Closed
-OR-
b.  Bad WINS/DNS entries
-OR-
c.  Misconfigured network 
-OR-
d.  Misconfigured SQL Server machine that has multiple netcards.
Aborting DTC Transaction
Releasing DTC Interface Pointers
Successfully Released pTransaction Pointer.

我与网络团队确认,这些服务器或网络内的任何地方都没有防火墙或端口阻塞。

答案1

原来我们在前一周就已安装了 Symantec Endpoint Protection。我完全忘记了那是在我周末离开之前。

这会阻止 DTC 流量,但奇怪的是它只会阻止 VM 流量,但从主机上看这是正常的。

相关内容