2016-07-15 22 views
0

我试图从一个空的blob容器中下载文件,并按预期得到了404。问题是我在fiddler中看到的这个文件只有1个调用,而不是3个(正如我在RetryPolicy中指定的那样),我也注意到调用在1秒内完成,因此在再次尝试之前它肯定没有等待10秒。 .. 如何知道BlobClient是否真的重试了?我可以信任Azure Blob RetryPolicy吗?为什么我无法在提琴手中找到这些重试请求

var blobClient = this.storageAccount.CreateCloudBlobClient(); blobClient.DefaultRequestOptions.RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(10), 3); var anchorString = await cloudBlobContainer.GetBlockBlobReference(ARGO_ANCHOR_VERSION_FILE).DownloadTextAsync();

回答

0

的问题,而不是 3(正如我在RetryPolicy指定)

这是预期的行为,默认是我看到的只有1呼吁该文件中的提琴手,重试策略(线性,指数等)不要重试所有操作。 重试策略用于处理transient错误。你提到你有404(未找到)错误,这不是一个可重试的操作,因为它不是一个瞬间错误。通常状态码为500+的错误默认是可重试的。

但是,您可以创建自定义重试策略并使任何错误代码可重试。我很长一段时间写了一篇博客文章,回到了重试策略,我写了一些用于创建自定义重试策略的代码。您可以创建一个自定义重试策略,将404错误视为瞬间错误,然后您应该看到存储客户端库重试您的操作。你可以在这里阅读这篇文章:http://gauravmantri.com/2012/12/30/storage-client-library-2-0-implementing-retry-policies/

+1

感谢您的解释!这是令人困惑的,因为我看到这个异常StorageException.IsRetryable = true,虽然 – Carol

+0

请看看这里的代码:https://github.com/Azure/azure-storage-net/blob/master/Lib/Common/ StorageException.cs。基于此'IsRetryable'仅在发生'ArgumentException'时设置为false(例如,您提供了无效的BLOB容器名称)。 HTH。 –

相关问题