Требуется ли 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