C# TransactionScope内部Azure blob存储上载
我想知道是否有办法,或者这是否可行: 将文件上载到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
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-您应该投票以重复方式关闭。不需要有相同的问题和相同的答案。我现在明白了-我想在我第一次通过时,出于某种原因,这一次似乎有点不同。这就是我想象的!!非常感谢您的澄清!