Требуется ли TransactionScope служба DTC?

Из того, что я читаю, чтобы использовать TransactionScope в .NET, вам нужна служба Distributed Transaction Coordinator в Windows для запуска. У меня есть служба отключена, и мое приложение, похоже, работает одинаково и откатывает транзакции без проблем.

Я что-то упустил? Как он может работать? Я запускаю Windows 7 и запускаю webapp с VisualStudio 2010.

Ответ 1

Более современные версии окон имеют мини-версию DTC в ядре. Он не распространяется, но использует тот же API - но он может обрабатывать только один ресурс для каждой транзакции.

TransactionScope использует это при запуске, затем "продвигает" транзакцию к реальному DTC в момент добавления второго ресурса (ресурс в вашем случае - это соединение с базой данных). Итак, до тех пор, пока ваш вариант использования ismple, вы избегаете (высоких) накладных расходов РАСПРОСТРАНЕННОЙ части кода DTC и можете работать без обслуживания.

Более подробную информацию о Manageger транзакции ядра можно найти на http://en.wikipedia.org/wiki/Kernel_Transaction_Manager

MS добавила его также потому, что NTFS получила транзакционную транзакцию, и ей необходимо убедиться, что DTC доступен.

http://www.codeguru.com/cpp/article.php/c18309/

Ответ 2

MSDTC входит в игру только в том случае, если у вас более одной транзакции с разными соединениями

SO, ответ:

Это зависит!

  • Если вы используете 1 TranScope на 1 соединение - тогда NO
  • Если вы используете 1 TranScope для более чем 1 соединения - тогда YES
  • Если вы создали объект TransactionScope, для которого требуется распределенная транзакция, тогда YES