如何使用 TransactionScope 包装文件副本并调用 Web 服务
本文关键字:调用 Web 服务 副本 文件 何使用 TransactionScope 包装 | 更新日期: 2023-09-27 18:31:28
我想在这种情况下使用TransactionScope,虽然我认为这是正确的方法,但我从未这样做过,并且遇到了困难。
在伪代码中,我想做的是:
- 开始交易
- 将文件复制到目标(Windows 桌面客户端到 NetApp 共享)
- 调用 Web 服务,该服务又会在数据库中添加对该文件的引用
- 如果发生文件复制错误或 Web 服务未成功响应,请回滚
- 从远程位置删除文件(如果文件仍然存在)
- 调用 Web 服务以删除对文件的引用,如果存在,则会将其删除
- 完成交易
我是否需要为文件复制和 Web 服务操作定义自己的资源管理器,以便它们可以正确实现回滚?
我一直在尝试四处搜索,但如果有人能指出我正确的方向,我将不胜感激。谢谢!
虽然我远非使用TransactionScope
对象的专家,但我不相信您可以使用它们回滚非数据库功能。但是,可以毫无问题地将不相关的功能添加到其中。正如@JeremyThompson正确提到的,您需要添加一个try
和catch
块才能完成此操作:
using (TransactionScope transactionScope = new TransactionScope())
{
try
{
// Do your database work here
// Then do your hard drive work here
transactionScope.Complete();
}
catch
{
// Manually rollback your hard drive work here
}
}