我在客户端上使用WinXP,在服务器上使用Win2003。
我需要做原子动作:创建移动文件,插入更新数据库。
使用WinXP进行文件系统事务是否有任何良好做法? 我知道在Vista / Win2008 / Win7中有WinXP中的TxF事务(NTFS)但不是。
我不想使用COM +,也不想使用其他复杂的解决方案。只需要良好的示例代码,以获得良好的实践。
Transactions and file-actions by Alberto Poblacion
在早于Vista的Windows版本中,文件系统不是 事务性的,因此您需要一个单独的工具来对您的文件进行事务处理。
您可以使用组件服务(COM +)来实现补偿资源 经理(CRM)。 CRM将提供事务日志并将回滚 如果在更新过程中崩溃,系统重新启动时会发生更改 文件,但你必须提供代码(在你自己的DLL中)提交和 回滚转换,通常是通过移入和移出文件 临时文件夹。它可以通过.Net完成.Net System.EnterpriseServices命名空间。如果我没记错的话,微软 官方课程2557包含一章教授如何创建CRM, 他们使用的例子正是建立在改变的基础上的 文件系统。
在较新版本的Windows中,您可以执行事务操作 NTFS:
http://msdn.microsoft.com/en-us/library/bb986748(VS.85).aspx
编辑。
参考文献:
https://transactionalfilemgr.codeplex.com/
http://www.codeproject.com/Articles/690136/All-About-TransactionScope
http://ayende.com/blog/4528/who-stole-my-transaction
答案 0 :(得分:2)
您可以创建自己的类来实现IEnlistmentNotification。
以下是有人做过的示例:http://www.chinhdo.com/20080825/transactional-file-manager/
答案 1 :(得分:0)
在XP中,您不会获得NTFS的 true 文件系统事务。也就是说,你可能不需要它。
例如,通过软件安装,您可以通过使用Windows Installer之类的东西在很大程度上免费获得事务的语义。
您希望最终实现的目标是什么?
答案 2 :(得分:0)
.NET Transactional File Manager应该在XP下运行。
出于兴趣,TxF可能会从未来的Windows版本中撤出(某些功能已在Win 8中弃用)。
请参阅How to write a transaction to cover Moving a file and Inserting record in database?。
答案 3 :(得分:0)
您可能希望查看我认为使用事务的File.Replace方法,因为它需要NTFS。 http://msdn.microsoft.com/en-us/library/9d9h163f(v=vs.100).aspx