Dtcping test passes but still have a Communication with the underlying transaction manager has failed

8

DTCPing tool says everything should be fine. The actual exception is:

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)

The service runs on a VM. Other servers are able to run distributed transactions, so DB box is configured properly.

c#
sql-server
transactions
transactionscope
msdtc
asked on Stack Overflow Aug 17, 2011 by Kimi

2 Answers

3

There is a good article on this subject here: Troubleshooting Problems with MSDTC. It was originally written for BizTalk Server but applies on other server as well.

Since you're running off a VPC, it's possible the DTC shares some identifiers with another machine on the same network. Please check the "Ensure that MSDTC is assigned a unique CID value" chapter in this article (see also http://blogs.msdn.com/b/johnlee/archive/2008/09/09/msdtc-on-virtual-machines.aspx), although I believe DTCPing should tell you about it... You can also try msdtc -uninstall and msdtc -install to fix this.

You should also check if your server are not using some VPN or encryption technology. I kinda remember this can cause issues.

answered on Stack Overflow Aug 22, 2011 by Simon Mourier
2

Someone has already mentioned unique IDs, make sure you do that before you do anything else, I've seen people blow up a LOT of time going down other routes only to find out that was all the problem was.

That said, I have found a tool called DTCTester to be more useful than DTCPing. http://support.microsoft.com/kb/293799

It's a little bit harder to use than DTCPing, but it also tests much closer to what you are normally looking to do which gives you a cleaner test result.

* Make sure that all possible firewall/filtering software is disabled and/or non-existant *

I can't stress that enough, I once spent almost 90 minutes trying to convince a cusotmer that his VPN sofware was acting as a personal firewall and blocking incoming sockets. Once he disabled it, the problems went away. (the software incidently was Cisco VPN Client, the setting was "Stateful Firewall (Always On)" - yep, it's ALWAYS on :) )

Remember that DTC is two-way traffic, so this has to be true on both sides, and you also need to ensure both machines have 'Enable Network DTC Access" allowed. I have also found that making sure the DTC settings on both boxes are synchronized generally ensures solid interaction as well.

answered on Stack Overflow Aug 27, 2011 by Brandon Langley

User contributions licensed under CC BY-SA 3.0