提前感谢您的时间和帮助。
我正在使用Azure客户端库(即CloudStorageAccount-CloudBlobClient-CloudBlob)下载/上传WPF应用程序中的Blob。
我想在我的WPF客户端应用程序中设置一个超时会话,以中止获取云blob的尝试。这与我可以在blob传输会话上设置的服务器端超时不同。我想这样做,因为将使用应用程序的互联网连接具有非常不稳定的间歇性连接。
换句话说,我试着做BlobContainer。在实际数据传输之前获取属性以检查互联网连接。如果没有连接,我不想在它超时并抛出异常之前等待90多秒。
我已经尝试在BlobRequestOptions中设置超时,但这不起作用,因为只有当我有连接时它才适用。
我是否理解错误的设置,或者我是否需要设置/配置/编码其他内容来实现更快的超时?
我可以在Fiddler中看到StorageClient库在幕后使用HTTP,根据我读到的一些帖子,我已经尝试在app.config中设置超时,如下所示。这也不起作用。
<configuration>
<system.web>
<httpRuntime executionTimeout="5" />
</system.web>
</configuration>
使用Blob请求选项的样本超时:
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中更改httpRuntime executionTimeout将不起作用。这是ASP在服务器端使用的设置。NET。
其次,使用BlobRequestOptions的代码应该可以工作,但有一点需要注意。默认情况下,BlobClient带有指数退避重试策略,用于处理瞬态条件(即:无网络访问)。在每次重试之间,它将等待一段时间,然后重试。
如果您想在尝试检查网络访问时禁用此功能,您可以简单地禁用重试策略:
blobClient.RetryPolicy = () =>
{
return (int currentRetryCount, Exception lastException, out TimeSpan retryInterval) =>
{
retryInterval = TimeSpan.Zero;
return false;
};
};
请确保仅在测试网络访问时禁用此功能,而不要在实际请求时禁用此选项。
哦,顺便说一句,你为什么不简单地用已经存在的东西来检查互联网连接呢?Windows中有一些可用的API,如InternetCheckConnection。
如果您的连接不稳定,最好改进重试策略,而不是禁用它(例如TOPAZ)。