如何使用TransactionScope包装文件副本&打电话给网络服务?

时间:2013-09-16 01:17:01

标签: c# wpf transactions transactionscope

我想在这种情况下使用TransactionScope,虽然我认为这是正确的方法,但我从未做过,而且遇到了困难。

在伪代码中,我想做的是以下内容:

  • 开始交易
    • 将文件复制到目标(Windows桌面客户端到netapp共享)
    • 调用一个Web服务,该服务将在数据库中添加对该文件的引用
  • 如果发生文件复制错误或Web服务未成功响应,则回滚
    • 如果文件仍然存在,则从远程位置删除该文件
    • 调用Web服务以删除对该文件的引用,如果该文件存在则将其删除
  • 完成交易

我是否需要为文件复制和Web服务操作定义自己的资源管理器,以便它们能够正确实现回滚?

我一直在尝试搜索,但如果有人能指出我正确的方向,我会非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

虽然我不是使用TransactionScope对象的专家,但我相信您可以使用它们回滚非数据库功能。但是, 可以毫无问题地将非相关功能添加到其中。正如@JeremyThompson正确提到的那样,您需要添加trycatch块来实现此功能:

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
    }
}