试图在新的块上获得租约让我获得404

时间:2016-06-27 13:50:09

标签: azure-storage azure-storage-blobs

当我尝试在我想要创建的CloudBlockBlob上获得租约时,我得到了404.

lease = blockBlob.AcquireLease(_leaseTimeOut, null);
blockBlob.UploadFromByteArrayAsync(contentBytes, 0, contentBytes.Length).Wait();

我可以想象这是因为它还没有存在,但是我如何在我想要创建的blob上使用租约。我不想在这里发生并发错误。

1 个答案:

答案 0 :(得分:2)

你说得对,问题是此时服务中还没有创建blob。获取租约的调用是对服务的调用,因此如果在不存在的blob上调用它,它将失败。

目前,无法在创建blob的同时租用blob。要创建块blob,您需要至少为其编写一个字符。一旦这样做,您就可以立即获得租约。

根据您处理安全性的方式,您可以通过确保容器是私有的,直到您租用blob(假设其他客户端未使用帐户密钥进行访问)来排除对blob的访问。或者,您可以编写应用程序,以便用户必须拥有SAS才能写入blob,然后确保只有当blob可供其他客户端写入时,SAS才会授予对blob的访问权限。

最后,请参阅https://azure.microsoft.com/en-us/documentation/articles/storage-concurrency/#managing-concurrency-in-blob-storage了解有关使用Blob存储开发并发应用程序的指南。