views:

28

answers:

1

Hi

In my project I am using Ado.Net's DbTransaction object to manage transaction... Then why I am getting MSDTC related error - "communication with underlying transaction manager failed".

Here is my code.

DbTransaction trans = Connection.BeginTransaction();

//Code

if (successfull)
{
    trans.Commit();
}
else
{
    trans.RollBack();
}
A: 

Unfortunately, MSDTC can really be a bear to set up. Once you have it going, however, it works beautifully. The problems only come in because everyone's network setup is just a little bit different.

It sounds like your MSDTC service might not be enabled on your client machine or, perhaps, your server.

Here's a guide to enabling it on Windows 7: --> http://www.thereforesystems.com/turn-on-msdtc-windows-7/

You will also need to enable it on your DB server: --> http://support.microsoft.com/kb/817064

An easy way to test if it works without having to contact your server admins is to set up two different local databases on your dev box. Then try to maintain a transaction across both database connections. Assuming you configured msdtc correctly, everything should work fine.

One last point is that you could look into making your life a little bit easier by referencing the System.Transactions library and using your transaction code like this:

using (TransactionScope scope = new TransactionScope())
{
    /* Perform transactional work here */
    SomeMethod();
    scope.Complete();
}

Note that no explicit rollback is required. If anything crashes inside the using statement, or if you exit the using statement before hitting .Complete();, your transaction will roll back. For more information on TransactionScope, see here: --> http://msdn.microsoft.com/en-us/library/ms172152(VS.90).aspx

Pandincus