На работе возникла необходимость использовать транзакции в коде, который поддерживается у нас до сих пор. Архитектура приложения такая, что запросы в БД уходят из 3-4 разных сборок, в некоторых случаях с использованием сохраненных процедур, с 3-4 адаптерами. Иногда больше.
Попробовал TransactionScope. На тестовом локальном сервере работало без проблем, но на основном рабочем сервере возникли проблемы со службой MSDTC: она запущена, но распределенные транзакции не запускаются. Если выполнить руками запрос «BEGIN DISTRIBUTED TRANSACTION», то получаем ошибку «MSDTC on server 'server' is unavailable.», а в логе сервера значится «Resource Manager Creation Failed: 0x8004d01c(error not found)». Служба MSDTC запущена и работает, проверили несколько раз. В проблеме рылся не я, но админы утверждают, что проблема в версии сервера — надо обновляться, а с этим у нас проблемы, сервер нагружен постоянно и достаточно сильно, перезагрузки планируются заранее задолго.
Решил посмотреть на альтернативные способы. Способ с созданием отдельного connection, запуском в нем транзакции и подпихивания этого connection всем требуемым адаптерам выглядит не очень удобно, отказался.
Может быть, есть другие способы, по легкости применения аналогичные transactionscope?
У вас одна БД или несколько?
Если одна, то использование MSDTC есть серьезная ошибка дизайна.
Не вкладывайте одни TransactionScope в другие, и все будет работать.