C# TransactionScope内部Azure blob存储上载

C# TransactionScope内部Azure blob存储上载,c#,azure,blob,azure-storage-blobs,azure-blob-storage,C#,Azure,Blob,Azure Storage Blobs,Azure Blob Storage,我想知道是否有办法,或者这是否可行: 将文件上载到TransactionScope内的Azure blob存储,如果出现任何问题,请通过“删除”该文件进行回滚 有人试过或达到过这样的目的吗 这只是我试图完成的一个代码示例: using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions() { IsolationLevel = System.Transact

我想知道是否有办法,或者这是否可行: 将文件上载到TransactionScope内的Azure blob存储,如果出现任何问题,请通过“删除”该文件进行回滚

有人试过或达到过这样的目的吗

这只是我试图完成的一个代码示例:

using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions() { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
{
  try {
    //some code before to get the file from its location....
    UploadFileToAzure(stream, filePath);
    transaction.Complete();
  }
  catch(Exception ex) 
  {
    //rollback the transaction and avoid uploading the file.
  }
}

是的,您可以这样做,但是就Azure存储而言,
TransactionScope
没有添加任何特殊内容。您必须使用适当的API/库调用删除该文件(如果已上载)。如果删除失败,回滚事务将不会撤消与blob有关的任何操作。

blob存储不知道事务-它是一种存储机制。您能在事务中写入本地磁盘吗

块blob以块的形式上传。每个区块在成功上传后都会被分配一个Id,文件的任何区块都可以按任何顺序上传(不需要按顺序)

在此阶段,blob仍然是“未提交的”-如果此时上载失败,您可以忘记它,Azure存储将在一段时间后清理/删除它。一旦上传了所有的块,您就可以通过告诉azure以什么顺序将这些块放在一起来提交blob(这将是一个有序的块ID列表)。在此之后,blob现在已提交,必须手动删除


在提交blob之前,您可以通过手动上载所有要首先上载的文件的所有块来模拟事务。

Related:Related:@dan-您应该投票以重复方式关闭。不需要有相同的问题和相同的答案。我现在明白了-我想在我第一次通过时,出于某种原因,这一次似乎有点不同。这就是我想象的!!非常感谢您的澄清!