2015-04-01 160 views
5

是否有某个类允许使用azure blockblob操作上的transactionscope进行回滚?C#Azure存储Blob上传TransactionScope

我想使这个作品:

CloudBlockBlob blockBlob; 

    private void UploadPicture(Stream iStream) 
    { 
     using(var ts = new TransactionScope()) 
     { 
      blockBlob.UploadFromStream(iStream); 

      throw new Exception(); 
      ts.Complete(); 
     } 
    } 

当异常是提高,上传的文件不会被取消。如果交易范围不可行,我应该如何进行?

+0

你想在这里实现什么?目标是使上传原子,以便整个上传成功或不做任何事情?你的blob有多大? – 2015-04-06 18:27:24

+0

@ AtulSikaria-MSFT是的我正在尝试使用他的元数据在我的数据库中进行原子上传。如果出现问题,我可以回滚。 blob的最大大小是5 Mo。 – Julian50 2015-04-07 07:23:59

+0

在这种情况下,您不应该需要在更新期间进行事务处理。 blob的更新是原子的。即使blob以块的形式上传,它也是提交blob的最后一个PutBlockList请求,它应该是原子的。 – 2015-04-07 19:47:08

回答

1

Azure存储客户端库不提供此支持。但是,如果您的方案可以接受取消支持,则可以将UploadFromStreamAsync API与CancellationToken一起使用。虽然它是异步上传blob,但您可以取消该操作。根据操作的当前进度,它将尝试中止上传。

+0

谢谢,但我想我真的事务范围卷返回为实体提供的示例 – Julian50 2015-04-01 20:10:05

+0

不幸的是,Azure存储不提供此功能。所以,你将不得不自己构建它。 – 2015-04-01 20:21:24

+0

我想,我不是第一个想要做这个功能的人。你需要它的照片,文件等。那么有没有一个课程已经写好了?我找不到任何东西。你有链接来帮助我吗? – Julian50 2015-04-01 20:25:37