I have a WinForms / WCF / SQLServer app where I am trying to use MSDTC transactions like this:
using System.Transactions;
// ...
var transOptions =
new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadCommitted,
Timeout = TimeSpan.FromSeconds(120)
};
using (var scope = new TransactionScope(TransactionScopeOption.Required,
transOptions))
{
// ...
if (everything_is_ok)
scope.Complete();
}
On my dev. box, where the server and client processes are on the same machine, it works fine. But when I deploy to the QA env, where server and client are on separate machines, whenever scope.Complete()
is called, the client hangs for the timeout period (2 minutes) and then I get:
The flowed transaction could not be unmarshaled. The following exception occurred: Communication with the underlying transaction manager has failed.
What can cause this?
MSDTC on the database server computer uses RPC dynamic port allocation to randomly select a port number ranging from 1024 to 65535 for communication with the central computer.
The Microsoft Distributed Transaction Coordinator (MSDTC) service is a component of modern versions of Microsoft Windows that is responsible for coordinating transactions that span multiple resource managers, such as databases, message queues, and file systems.
I spent few hours today trying to resolve this problem under Windows 7. Finally it worked, here's what I did:
This is maybe not the best solution but in fact the only one that worked in my case.
EDIT: After another issue with MSDTC under Windows 7 SP1 I found out that there are two things you need to do in order to make it work.
I had similar issue and it got resolved when the administrator set MaxUserPort
registry key value as 65534. [The issue happened in a clustered server setup only]
REFERENCES
Other References
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With