我正在开发WebAPI在两个系统之间传输数据。简化我必须实现一个HTTP GET方法来检索大数据。POST方法推送数据也有同样的问题。
如何避免长时间处理导致的超时错误?
任何帮助都将是感激的:)
感谢对于恢复问题,我使用Polly见下文:
public class RetryHandler : DelegatingHandler
{
// Strongly consider limiting the number of retries - "retry forever" is
// probably not the most user friendly way you could respond to "the
// network cable got pulled out."
private const int MaxRetries = 3;
public RetryHandler(HttpMessageHandler innerHandler)
: base(innerHandler)
{ }
// It doesn't work with Transient timeouts
////protected override async Task<HttpResponseMessage> SendAsync(
//// HttpRequestMessage request,
//// CancellationToken cancellationToken)
////{
//// HttpResponseMessage response = null;
//// for (int i = 0; i < MaxRetries; i++)
//// {
//// response = await base.SendAsync(request, cancellationToken);
//// if (response.IsSuccessStatusCode)
//// {
//// return response;
//// }
//// }
//// return response;
////}
///
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken) =>
Policy
.Handle<HttpRequestException>()
.Or<TaskCanceledException>()
.OrResult<HttpResponseMessage>(x => !x.IsSuccessStatusCode)
.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(3, retryAttempt)))
.ExecuteAsync(() => base.SendAsync(request, cancellationToken));
}
我传递RetryHandler到HttpClient对象:
this.Client = new HttpClient(new RetryHandler(new HttpClientHandler()))
{
BaseAddress = new Uri(uriText)
};