I am trying to use TransactionScope
, but keep getting the exception below.
The app is running on a different machine than the database, if that matters. I am using SQL Server 2005.
Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable DTC for network access in the security configuration
for MSDTC using the Component Services Administrative tool.
using (TransactionScope tsTransScope = new TransactionScope())
{
//Do stuff here
tsTransScope.Complete();
}
Edit
I made some changes based on the feedback. Now I'm getting this error:
"Error HRESULT E_FAIL has been returned from a call to a COM component."
"Communication with the underlying transaction manager has failed."
Solution
I think the accepted answer fixed the initial issue I was getting. The 2nd error seems to be specific to Entity Framework. I'll post another question for it.
Here are the properties on the client:
Client http://www.portnine.com/data/images/Misc/client.jpg
Here are the properties on the server:
Server http://www.portnine.com/data/images/Misc/server.jpg
Best Solution
You need to enable network DTC access as described in this Microsoft TechNet Article. This change may have to be made on both the database and application servers. Often times DTC is already turned on a database server so I'd look at the application server first.
Here is a screen shot of what we use except for the "Allow Remote Administration" option:
I have not run into the HRESULT E_Fail issue you are now having but this article on XP SP2 and transactions had this interesting suggestion:
Finally, while not specific to your issue a very important thing to note about using the
TransactionScope
class is that its default setting is to utilize a Transaction Isolation Level of Serializable. Serializable is the most restrictive of the isolation levels and frankly its surprising that it was chosen as the default. If you do not need this level of locking I would highly recommend setting the isolation level to a less restrictive option (ReadCommitted) when instantiating aTransactionScope
: