gpt4 book ai didi

c# - Azure Blob 存储 .NET 客户端请求超时

转载 作者:行者123 更新时间:2023-11-30 18:13:21 26 4
gpt4 key购买 nike

我试图了解 Azure 存储 .NET 客户端中处理网络错误的行为。简而言之,我的问题是:

如果我在从 blob 存储下载 blob 时拔掉网络电缆,我的应用程序将挂起至少 30 分钟(这是我的耐心持续的时间 - 它可能会挂起更长时间)。

例如,如果我使用以下代码(我没有在 Blob 客户端本身上配置任何设置),就会发生这种情况。

...

var blockBlob = container.GetBlockBlobReference("myblob.data");

var blobRequestOptions = new BlobRequestOptions()
{
RetryPolicy = new NoRetry(),
};

using (var stream = new MemoryStream())
{
blockBlob.DownloadToStream(stream, null, blobRequestOptions);
}

我知道我可以在 BlobRequestOptions 中配置 MaximumExecutionTime 属性,但对我来说有点奇怪的是,默认行为是在网络连接中断时无限期挂起。这让我怀疑我错过了一些关于客户端应该如何使用的基本知识。 (MaximumExecutionTimeout 的默认值似乎是无限)。

我也知道我可以传入 ServerTimeout,但我的理解是,这是在 Azure 存储服务内部使用的,如果出现网络中断,则不适用。

我认为我正在特别寻找的是对 blob 存储进行的 HTTP 调用的每个请求超时。类似于 HttpWebRequest 的超时。

(我已在 Azure 存储客户端版本 9.3.2 中重现了我的问题)

最佳答案

根据我对SDK的理解,超时是默认在服务器端处理的。我在 MSDN 上没有找到任何与此相关的内容,但 Azure Java SDK(使用相同的 HTTP 端点)说:

默认最大执行时间是在客户端设置的,默认为null,表示没有最大时间。

您可以在这里查看:https://azure.github.io/azure-storage-java/index.html?com/microsoft/azure/storage/RequestOptions.html

查找 setMaximumExecutionTimeInMs 方法。

由于超时似乎是由服务器处理的,并且默认客户端没有默认超时值,因此当您拔掉路由器时,请求永远不会结束是有道理的,因为您将无法捕获服务器端超时.

关于c# - Azure Blob 存储 .NET 客户端请求超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52850533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com