views:

568

answers:

1

I have a Visual Studio 2010 Windows Forms application in which I start a transaction using the TransactionScope class. I then Receive a message from a Sql Server Broker Services message queue, which works fine. I next try to call a stored procedure from the same database with a call to my data access layer which is a Visual Studio dataset (xsd file). When I make this second call to the database I get the following error message:

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).

I've seen several posts on the web that talk about Enabling DTC access through dcomcnfg.exe, and allowing DTC to communicate through Windows Firewall. I've done those things, and am still having this problem. I know our remote database server is setup to Enable DTC access, because we are using similar transactions in other projects built with Visual Studio 2008 on Windows XP and Vista. I think there is something specific about Windows 7 and Visual Studio 2010 causing this problem, but haven't been able to find out what it is. Can anyone help with this problem?

I just saw a post on the web from another programmer having this problem (http://www.pcreview.co.uk/forums/thread-3977150.php), he says it works fine on Windows 7 - x86, but gets this error on Windows 7 - x64. I'm running the x64 version of Windows 7, does anyone know if there are problems with MSDTC on Windows 7 - 64 bit version?

A: 

It turned out that I was leaving a database connection open in my Receive call to the SQL Server Service Broker, then trying to make a new connection to my data access layer. That was causing the problem, the fix turned out to be to close the first connection before opening the second one.

Russ Clark