К сожалению, MSDTC действительно может быть медвежьим в настройке. Однако, как только вы это сделаете, это будет прекрасно работать. Проблемы возникают только потому, что настройки сети у всех немного отличаются.
Похоже, что ваша служба MSDTC может быть не включена на вашем клиентском компьютере или, возможно, на вашем сервере.
Вот руководство по его включению в Windows 7: -> http://www.thereforesystems.com/turn-on-msdtc-windows-7/
Вам также необходимо включить его на сервере БД: -> http://support.microsoft.com/kb/817064
Простой способ проверить, работает ли он без обращения к администраторам вашего сервера, - настроить две разные локальные базы данных на вашем устройстве разработчика. Затем попробуйте выполнить транзакцию через оба соединения с базой данных. Если вы правильно настроили msdtc, все должно работать нормально.
И еще один момент: вы можете немного упростить свою жизнь, обратившись к библиотеке System.Transactions и используя свой код транзакции, например:
using (TransactionScope scope = new TransactionScope())
{
/* Perform transactional work here */
SomeMethod();
scope.Complete();
}
Обратите внимание, что явного отката не требуется. Если в операторе using произойдет сбой, или вы выйдете из оператора using до нажатия кнопки .Complete ();, ваша транзакция будет отменена. Для получения дополнительной информации о TransactionScope см. Здесь: -> http://msdn.microsoft.com/en-us/library/ms172152(VS.90).aspx