gpt4 book ai didi

wpf - Azure StorageClient 客户端超时

转载 作者:行者123 更新时间:2023-12-04 05:29:40 27 4
gpt4 key购买 nike

预先感谢您的时间和帮助。

我正在使用 Azure 客户端库(即 CloudStorageAccount - CloudBlobClient - CloudBlob)在 WPF 应用程序中下载/上传 Blob。

我想在 WPF 客户端应用程序中设置超时 session ,以中止获取云 blob 的尝试。这与我可以在 Blob 传输 session 上设置的服务器端超时不同。我想这样做,因为将使用应用程序的互联网连接具有非常不稳定的间歇性连接。

换句话说,我尝试在实际数据传输之前执行 BlobContainer.FetchAttributes 来检查互联网连接。如果没有连接,我不想在超时并抛出异常之前等待 90 多秒。

我已经尝试在 BlobRequestOptions 中设置超时,但这不起作用,因为它仅在我建立连接后才适用。

我是否理解了错误的设置,或者我需要设置/配置/编码其他内容以实现更快的超时?

我可以在 Fiddler 中看到 StorageClient 库在幕后使用 HTTP,根据我读到的一些文章,我尝试在 app.config 中设置超时,如下所示。这也不起作用。

<configuration>
<system.web>
<httpRuntime executionTimeout="5" />
</system.web>
</configuration>

使用 BlobRequest 选项的示例超时:

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
blobContainer = blobClient.GetContainerReference("abcd");
CloudBlob blob = blobContainer.GetBlobReference(aCloudPath);
BlobRequestOptions bro = new BlobRequestOptions()
{ Timeout = TimeSpan.FromSeconds(5) };
blob.DownloadToFile(aLocalPath, bro);

这两个选项都不起作用!!

最佳答案

首先,更改 app.config 中的 httpRuntimeexecutionTimeout 将不起作用。这是 ASP.NET 在服务器端使用的设置。

其次,带有 BlobRequestOptions 的代码应该可以工作,但有一个警告。默认情况下,BlobClient 附带指数退避重试策略来处理 transient 情况(即:无网络访问)。在每次重试之间,它会等待一段时间,然后重试。

如果您想在尝试检查网络访问时禁用此功能,只需禁用重试策略即可:

        blobClient.RetryPolicy = () =>
{
return (int currentRetryCount, Exception lastException, out TimeSpan retryInterval) =>
{
retryInterval = TimeSpan.Zero;
return false;
};
};

请确保仅在测试网络访问时禁用此功能,不要在实际请求时禁用此功能。

哦,顺便说一句,为什么不简单地使用已经存在的东西来检查互联网连接呢? Windows 中有一些可用的 API,例如 InternetCheckConnection

如果您的连接不稳定,改进重试策略而不是禁用它可能是更好的主意(例如,查看 TOPAZ)。

关于wpf - Azure StorageClient 客户端超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12779772/

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