Транзакции файловой системы с использованием .NET на WinXP - PullRequest
4 голосов
/ 22 апреля 2010

Я использую WinXP на клиентах и ​​Win2003 на сервере.

Мне нужно выполнить атомарные действия: создавать-перемещать файлы, вставлять-обновлять базу данных.

Есть ли хорошие практики для транзакций файловой системы с использованием WinXP? Я знаю, что в Vista / Win2008 / Win7 есть транзакция TxF (NTFS), но не в WinXP.

Я не хочу использовать COM + или другие сложные решения. Нужен только хороший пример кода, для хорошей практики.

Транзакции и файловые действия Альберто Побласьона

В версиях Windows, более ранних, чем Vista, файловая система не транзакционный, поэтому вам нужен отдельный инструмент для транзакций в ваших файлах.

Вы можете использовать Службы компонентов (COM +) для реализации Компенсирующего ресурса Менеджер (CRM). CRM предоставит журнал транзакций и откатится изменения во время перезапуска системы, если он произошел сбой во время обновления вашего файлы, но вы должны будете предоставить код (в вашей собственной DLL) для фиксации и откатить переход, как правило, путем перемещения файлов в и из временная папка. Все это можно сделать в .Net с помощью Пространство имен System.EnterpriseServices. Если я правильно помню, Microsoft Официальный курс 2557 содержит главу, которая учит, как создать CRM, и пример, который они используют, построен именно на изменениях в файловая система.

В более новых версиях Windows вы можете выполнять транзакционные операции на NTFS:

http://msdn.microsoft.com/en-us/library/bb986748(VS.85).aspx

http://msdn.microsoft.com/en-us/magazine/cc163388.aspx

http://codeproject.com/KB/vista/VistaKTM.aspx

Редактировать.

Ссылки

https://transactionalfilemgr.codeplex.com/

http://www.codeproject.com/Articles/690136/All-About-TransactionScope

http://ayende.com/blog/4528/who-stole-my-transaction

http://www.chinhdo.com/20080825/transactional-file-manager/

http://bmegias.wordpress.com/2010/10/25/ejecutar-acciones-al-finalizar-la-transaccion-transactioncompleted-vs-enlistvolatile/

Ответы [ 4 ]

2 голосов
/ 01 июля 2010

Вы можете создать свой собственный класс, который реализует IEnlistmentNotification.

Вот пример того, кто это сделал: http://www.chinhdo.com/20080825/transactional-file-manager/

0 голосов
/ 09 мая 2013

Возможно, вы захотите взглянуть на метод File.Replace, который, я думаю, использует транзакции, поскольку для него требуется NTFS. http://msdn.microsoft.com/en-us/library/9d9h163f(v=vs.100).aspx

0 голосов
/ 15 августа 2012

Транзакционный файловый менеджер .NET должен работать под XP.

Из интереса TxF, вероятно, будет использоваться в будущих выпусках Windows (некоторые функции устарели в Win 8).

См. Как написать транзакцию для покрытия Перемещение файла и вставка записи в базу данных? .

0 голосов
/ 22 апреля 2010

Вы не получите true транзакций файловой системы для NTFS в XP. Тем не менее, вам это может не понадобиться.

Например, при установке программного обеспечения вы можете в значительной степени получить семантику транзакций бесплатно, используя что-то вроде установщика Windows.

Чего вы в конечном итоге хотите достичь?

...