【问题标题】:How do I lease an individual blob in an Azure storage container using BlobLeaseClient?如何使用 BlobLeaseClient 在 Azure 存储容器中租用单个 Blob?
【发布时间】:2020-09-30 19:06:33
【问题描述】:

这方面的文档似乎很混乱。使用 CloudBlobContainer.AcquireLease 方法现在已弃用的 Microsoft.Azure.Storage.Blob nuget 包似乎可以做到这一点。

更新后的BlobLeaseClient 有一个Acquire() 方法,它声明:

Acquire(TimeSpan, RequestConditions, CancellationToken) 操作 获得 blob 或容器的租约。

但不清楚应该如何使用它。尽管我找到了已弃用软件包的示例,但我找不到任何此类示例。

目前我有这个:

//injected using AddBlobServiceClient, etc. Uses DefaultAzureCredential
private BlobContainerClient blobContainerClient;

blobContainerClient = blobServiceClient.GetBlobContainerClient("containerName");



BlobLeaseClient blc = blobContainerClient.GetBlobLeaseClient();

//throws exception here
BlobLease bl = await blc.AcquireAsync(new TimeSpan(0, 0, 30));

但是当我运行它时,我会得到:

The value for one of the HTTP headers is not in the correct format.
RequestId:<guid>
Time:2020-09-30T10:28:47.8781946Z
Status: 400 (The value for one of the HTTP headers is not in the correct format.)
ErrorCode: InvalidHeaderValue

Headers:
Server: Windows-Azure-Blob/1.0,Microsoft-HTTPAPI/2.0
x-ms-request-id: <guid>
x-ms-client-request-id: <guid>
x-ms-version: 2019-12-12
x-ms-error-code: InvalidHeaderValue
Date: Wed, 30 Sep 2020 10:28:47 GMT
Content-Length: 328
Content-Type: application/xml

我也不确定这是否会租用 bob,因为我从未指定要租用的 blob。

有人知道如何在这种情况下正确使用 BlobLeaseClient 吗?

【问题讨论】:

    标签: c# azure azure-blob-storage


    【解决方案1】:

    首先你需要获得一个 blob 的引用:

    blobContainerClient = blobServiceClient.GetBlobContainerClient("containerName");
    var blobClient = blobContainerClient.GetBlobClient("my.blob");
    

    然后创建一个租约客户端并获取租约:

    var blc = blobClient.GetBlobLeaseClient();
    var bl = await blc.AcquireAsync(TimeSpan.FromSeconds(30))
    

    【讨论】:

    • 非常感谢。我已经尝试了很多这种流程的排列,所有这些看起来都应该工作,但没有。似乎对您如何使用这些对象有些特别。
    • 所以一个重要的问题似乎是你必须specify a time period between 15-60 seconds or else you get an error。这是记录在案的,但我不知道为什么这是helper class lets you specify other time periods if that's a limiting factor
    • 它会给您带来问题吗?您可以将其锁定 60 秒,然后在完成后将其释放,这可能会在 10 秒内完成。
    • 这确实让你想知道为什么这些限制首先存在。
    • 我可以解决它。消息如此不透明,这令人沮丧。只是想添加评论以防其他人遇到此问题并需要此信息。
    猜你喜欢
    • 2016-03-25
    • 2016-06-25
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2020-06-02
    相关资源
    最近更新 更多