C# Azure 存储 Blob 上传 TransactionScope

5

在Azure BlockBlob操作中,是否有一个类可以使用TransactionScope进行回滚?

我想让它起作用:

  CloudBlockBlob blockBlob;

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

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

当出现异常时,上传的文件不会被取消。如果使用事务范围无法解决问题,应该如何处理?


你在这里想要实现什么?目标是使上传原子化,以便整个上传成功或者全部失败吗?你的 blob 有多大? - Atul Sikaria
@AtulSikaria-MSFT 是的,我正在尝试将带有元数据的原子上传到我的数据库中。如果出现问题,我可以回滚。Blob 的最大大小为 5 Mo。 - Julian50
在这种情况下,您更新时不需要进行事务回滚。Blob的更新是原子性的。即使Blob以块上传,也是最后一个PutBlockList请求提交Blob,应该是原子性的。 - Atul Sikaria
@AtulSikaria-MSFT 我觉得我们之间存在误解。我想要将“Blob上传+SQL事务”作为一个原子操作,而不仅仅是Blob上传。 - Julian50
@AtulSikaria-MSFT 我需要更深入地了解,但我认为http://azure.microsoft.com/fr-fr/services/documentdb/应该能够回答我的问题。 - Julian50
1个回答

1
Azure存储客户端库不提供此支持。然而,如果取消支持适用于您的场景,您可以使用UploadFromStreamAsync API和CancellationToken。在异步上传Blob时,您可以取消操作。根据操作的当前进度,它将尝试中止上传。

谢谢,但是我想要的是真正的事务范围回滚,就像实体提供的例子一样。 - Julian50
不幸的是,Azure存储没有提供这个功能。因此,您将不得不自己构建它。 - Serdar Ozler
我想,我不是第一个想要实现这个功能的人。您需要它来处理图片、文档等等。那么,是否已经有某个类已经编写好了呢?我找不到任何相关信息。请问您能提供帮助链接吗? - Julian50

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接