【问题标题】:Blob Stream as Input Binding in Azure Function uses which LocationMode to get input streamBlob 流作为 Azure 函数中的输入绑定使用哪个 LocationMode 来获取输入流
【发布时间】:2020-04-28 10:55:31
【问题描述】:

我使用 Blob 作为输入绑定来获取 Blob 流作为输入,然后对此流文本进行处理。对于灾难恢复,我需要在函数获取输入流时将 LocationMode (Microsoft.Azure.Storage.RetryPolicies) 称为“PrimaryThenSecondary”。在这种情况下,默认的 LocationMode 是什么以及如何更改它。

下面是如何使用 Blob 输入绑定-

[FunctionName("FunctionName")]
        public async Task RunAsync(
            [EventGridTrigger]EventGridEvent eventGridEvent,
            [Blob("{data.url}", FileAccess.Read, Connection = "BlobStorageConnectionString")]Stream input,
            [Table("TableName", Connection = "BlobStorageConnectionString")]CloudTable cloudTable,
            ILogger log)
        {
          //Some code

          //To get the data in blob
          StreamReader streamReader = new StreamReader(input);
          string blobData = await streamReader.ReadToEndAsync();
        }

我看到的一种控制方法是 - 获取 CloudBlockBlob 而不是流作为输入

[FunctionName("FunctionName")]
        public async Task RunAsync(
            [EventGridTrigger]EventGridEvent eventGridEvent,
            [Blob("{data.url}", FileAccess.Read, Connection = "BlobStorageConnectionString")]CloudBlockBlob input,
            [Table("TableName", Connection = "BlobStorageConnectionString")]CloudTable cloudTable,
            ILogger log)
        {
          //Some code to get the stream using 
          // Task DownloadToFileAsync(string path, FileMode mode, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext);
        }

【问题讨论】:

    标签: azure azure-functions azure-blob-storage


    【解决方案1】:

    在这种情况下,默认的 LocationMode 是什么以及如何更改它。

    您可以使用getLocationMode 获取此请求的默认定位模式。

    并用BlobRequestOptions.LocationMode属性设置请求的定位方式。

    locationModeRequestOptions = new BlobRequestOptions() { LocationMode = RetryPolicies.LocationMode.PrimaryThenSecondary };
    byteCount = blob.DownloadToByteArray(destinationArray, index: 0, accessCondition: null, options: locationModeRequestOptions);
    

    LocationMode 包含 PrimaryOnlyPrimaryThenSecondarySecondaryOnlySecondaryThenPrimary。更多详情可以参考这个article

    【讨论】:

    • Right.. 但为此我需要将 CloudBlockBlob 作为函数中的输入绑定。如果我使用 Stream 作为输入绑定会发生什么。在流的情况下,我们不会显式下载 blob 文本,它会自动下载并作为流传递。但是我想知道当这个流作为输入传递给函数时使用了什么 LocationMode 。问的原因 - 想确保如果主要区域关闭,我们仍然从 blob 获取流
    • 对于stream,似乎无法设置stream的定位模式。
    • 正确.. 我们无法设置。但是当我们使用流时,后端使用的是什么定位模式?
    • 好像是默认设计的,我找不到任何文件来获取它。
    猜你喜欢
    • 2018-05-17
    • 2017-04-06
    • 2015-05-30
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    相关资源
    最近更新 更多