当我尝试在我想要创建的CloudBlockBlob上获得租约时,我得到了404.
lease = blockBlob.AcquireLease(_leaseTimeOut, null);
blockBlob.UploadFromByteArrayAsync(contentBytes, 0, contentBytes.Length).Wait();
我可以想象这是因为它还没有存在,但是我如何在我想要创建的blob上使用租约。我不想在这里发生并发错误。
答案 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存储开发并发应用程序的指南。