wpf - Azure StorageClient 客户端超时

标签 wpf azure timeout storage blob

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

我正在使用 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/

相关文章:

C# WPF Webbrowser msHTML - 探索 DOM - 查找元素

python - 通过 Http 触发器将新的输入数据发送到已经运行的 Orchestrator 功能

ios - 如何设置 SKProductsRequest 超时秒? SKProductsRequest 的默认超时秒数是多少?

c# - ContinueWith() 直到主机进程结束才执行

c# - 需要更多地控制文本框的 MouseDown 和 KeyDown

c# - 在列表框内添加一个动态文本框

azure - 如何备份 Azure 表和 Blob

azure - 应用程序网关 ARM 模板 - 启用防火墙的参数

Bash : If command timeout, 执行其他操作

php - file_get_contents 和 file_put_contents 的 FTP 超时