Назад | Перейти на главную страницу

Диспетчер транзакций 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 -uninstall затем msdtc -install и перезапускал службу несколько раз.

Я несколько раз перезагружал сервер.

Я могу подключиться к базе данных с помощью Sql Server Management Studio

DTCPing при попытке подключиться с SQL-сервера к Biztalk-серверу приводит к (когда 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 в сети и получил ту же ошибку. Я в нескольких шагах от того, чтобы вскинуть руки и перестроить среду разработки - ugg :(

Я могу подключиться по telnet к порту 135 с BizTalk на 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.

Я подтвердил сетевой команде, что на этих серверах или где-либо в сети нет брандмауэров или блокировки портов.

Оказалось, что за неделю до этого у нас была запущена защита Symantec Endpoint. Я совершенно забыл, что это было прямо перед отъездом на выходные.

Это блокировало трафик DTC, но странно, что он блокировал только трафик виртуальной машины, но это было нормально с хост-машины.