Azure Blob存储DownloadToStreamAsync在网络更改期间挂起

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Azure Blob存储DownloadToStreamAsync在网络更改期间挂起相关的知识,希望对你有一定的参考价值。

我在Microsoft.WindowsAzure.Storage v9.3.3Microsoft.Azure.Storage.Blob v11.1.0 NuGet库中遇到了问题。特别是在下载大文件时。如果您在“ DownloadToStreamAsync”方法期间更改网络,则调用将挂起。我一直在查看处理文件lot的代码,该代码偶尔会挂起,并且一直在尝试缩小范围。我认为网络更改可能是触发Azure Blob存储库中某些故障的可靠方法。

有关此问题的更多信息;

  • [拔下网络电缆时,我的计算机切换为WiFi,但请求永远不会恢复
  • 如果我开始通过WiFi下载,然后插入网络电缆,则会发生相同的错误
  • “ ServerTimeout”属性绝不会失败请求,也不会按照Documentation的要求进行操作>
  • “ MaximumExecutionTime”属性的确使请求失败,但我们不想将自己限制在某个时间段内,尤其是因为我们正在处理大文件时
  • 如果在通话期间更改网络,以下代码将在100%的时间内失败。

static void Main(string[] args)
{
    try
    {
        CloudStorageAccount.TryParse("<Connection String>", out var storageAccount);
        var cloudBlobClient = storageAccount.CreateCloudBlobClient();
        var container = cloudBlobClient.GetContainerReference("<Container Reference>");
        var blobRef = container.GetBlockBlobReference("Large Text.txt");
        Stream memoryStream = new MemoryStream();
        BlobRequestOptions optionsWithRetryPolicy = new BlobRequestOptions() { ServerTimeout = TimeSpan.FromSeconds(5), RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(20), 4) };
        blobRef.DownloadToStreamAsync(memoryStream, null, optionsWithRetryPolicy, null).GetAwaiter().GetResult();
        Console.WriteLine("Completed");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Exception: {ex.Message}");
    }
    finally
    {
        Console.WriteLine("Finished");
    }
}

[我在Azure存储GitHub中找到了this active issue,但它似乎不活动。

使用此软件包时,我还可以采用其他方法来可靠,有效地下载blob或缺少的内容吗?

我在使用Microsoft.WindowsAzure.Storage v9.3.3和Microsoft.Azure.Storage.Blob v11.1.0 NuGet库时遇到问题。特别是在下载大文件时。如果您更改网络...

答案

根据我的研究,除**MaximumExecutionTime**之外,目前尚无此支持。最大执行时间是为单个API调用分配的时间。如果在所有REST请求,重试等过程中在API中花费的总时间超过该值,则客户端将超时。此值仅在客户端上跟踪,不会发送到服务。

另一答案

感谢Mohit的建议。

以上是关于Azure Blob存储DownloadToStreamAsync在网络更改期间挂起的主要内容,如果未能解决你的问题,请参考以下文章

使用 azure-storage-blob 或 azure-storage 上传和删除 Azure 存储 Blob

仅从 Azure 存储 [Azure-Blob][REST] 中的 Blob 列表获取特定元数据

Azure 存储:Blob:Python:获取指示符是不是存在 Blob

请求令牌时如何在 Azure 存储 Blob 中为 REST 请求指定范围? [AZURE-BLOB][REST API]

向 Azure Blob 存储发出 GET 请求时授权失败 [REST API][Azure Blob 存储]

将多个 Blob 上传到 Azure 存储