我的应用程序使用Azure存储块来将文件从远程存储下载到本地计算机。
它的工作原理:
HttpClient做的。以下是我下载文件的方式:
HttpRequestMessage msg = new HttpRequestMessage(HttpMethod.Get, signedUrl);
HttpClient.Timeout = TimeSpan.FromSeconds(120);
var response = await HttpClient.SendAsync(msg);
response.EnsureSuccessStatusCode();我发现每天都有几次例外:
System.Threading.Tasks.TaskCanceledException:手术被取消了。-> System.IO.IOException:无法从传输连接读取数据:操作取消。-> System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16令牌应System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage请求( cancellationToken cancellationToken),( cancellationToken cancellationToken)在System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task
1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) at Polly.Retry.AsyncRetryEngine.ImplementationAsync[TResult](Func3操作、上下文、CancellationToken CancellationToken、ExceptionPredicates shouldRetryExceptionPredicates、ResultPredicates1 shouldRetryResultPredicates, Func5 onRetryAsync、Int32 permittedRetryCount、IEnumerable1 sleepDurationsEnumerable, Func4 IEnumerable、Boolean )处的3动作、上下文、en22#、Boolean )
在这一点上,我必须澄清,这种行为发生在系统中传递的URL的0.1%。
我怀疑问题出在签名网址上。我发现在所有情况下签名的URL是正确的-我只是把它放在浏览器中,它是工作的。
现在,当我知道问题不是URL本身时,我想这可能是一个网络问题。因此,通过使用波莉,我添加了5次重试,每个重试之间都有指数延迟。最多重试5次。延迟公式- 3^n (其中n是重试次数)。在最坏的情况下,它将等待4分钟才能再次尝试.即使是现在-仍然是同样的错误。所有5次重试都已使用,但未下载该文件。
该怎么办呢?我还应该查什么?
发布于 2020-01-21 09:51:16
似乎是网络问题。我建议您使用下载blob。
// Blob SAS URL
string url = "https://storagetest789.blob.core.windows.net/devops/deploy.ps1?sp=r&st=2020-01-21T09:39:06Z&se=2020-01-21T17:39:06Z&spr=https&sv=2019-02-02&sr=b&sig=tyGX6wpgAooOZK2Po2ntukF0fGx3PosSNTgkLlVysrE%3D";
CloudBlockBlob blob = new CloudBlockBlob(new Uri(url));
Console.WriteLine(blob.DownloadText());您还可以通过SDK方法下载到文件或流中。SDK可以处理所有的底层内容。
https://stackoverflow.com/questions/59836258
复制相似问题