试图租用一个新的 blockblob 让我得到一个 404
Trying to acquire a lease on a new blockblob gets me a 404
当我尝试在我想创建的 CloudBlockBlob 上获取租约时,我得到了 404。
lease = blockBlob.AcquireLease(_leaseTimeOut, null);
blockBlob.UploadFromByteArrayAsync(contentBytes, 0, contentBytes.Length).Wait();
我可以想象这是因为它还不存在,但是我如何在我想要创建的 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 存储开发并发应用程序的指南。
当我尝试在我想创建的 CloudBlockBlob 上获取租约时,我得到了 404。
lease = blockBlob.AcquireLease(_leaseTimeOut, null);
blockBlob.UploadFromByteArrayAsync(contentBytes, 0, contentBytes.Length).Wait();
我可以想象这是因为它还不存在,但是我如何在我想要创建的 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 存储开发并发应用程序的指南。