C# - Система. Транзакции. TransactionScope

Мне было любопытно на предмет класса TransactionScope.

По большей части я предполагаю, что это было предназначено для соединений с базой данных (который является тем, что я использовал его для).

Мой вопрос, банка, Вы помещаете какой-либо код в блок использования TransactionScope для создания этого транзакционным? Документация MS не является четкой на этом.

Если это может использоваться для создания кода кроме соединений с базой данных транзакционным, которые поддерживаются? Казалось бы сумасшедшим мне, если это могло бы сделать Систему. Транзакционные операции IO.File.

14
задан jonathanpeppers 16 February 2010 в 14:07
поделиться

2 ответа

TransactionScope не только для баз данных. Каждый компонент, реализующий интерфейс IEnlistmentNotification, может участвовать в двухфазной фиксации области транзакции.

Вот пример хранения транзакций в памяти: http://www.codeproject.com/KB/dotnet/Transactional_Repository.aspx

Кроме того, я не уверен, что В .NET есть компоненты для ввода-вывода транзакционных файлов, но реализовать такой компонент довольно просто - последние ОС, такие как Vista и Windows Server 2008, поддерживают ввод-вывод файлов транзакций.

13
ответ дан 1 December 2019 в 13:21
поделиться

Нет, вы не можете сделать произвольный код транзакционным, запустив его внутри TransactionScope .

Как вы отметили в комментарии, пространство имен System.Transactions предоставляет классы инфраструктуры, которые помогают сделать любой ресурс транзакционным . По умолчанию .NET предоставляет поддержку диспетчера ресурсов для нескольких видов операций, перечисленных во введении к пространству имен, которое вы связали (в комментарии): «SQL Server, ADO.NET, MSMQ и координатор распределенных транзакций Microsoft (MSDTC)».

Оказывается, существует поддержка транзакций файловой системы - хотя я смог найти ее только для NTFS ( Расширьте свои приложения с помощью транзакций файловой системы ). Однако за мои деньги этот код мог серьезно использовать фасад. ;) Возможно, существуют другие, более обобщенные реализации (или, возможно, нет - создание транзакционного ввода-вывода файлов может потребовать дополнительной инфраструктуры, предоставляемой NTFS).

Также ведется изрядное количество исследований по внесению изменений в транзакционную память в оперативной памяти, называемую программной транзакционной памятью . Microsoft DevLabs предлагает реализацию: STM.NET .

6
ответ дан 1 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: