如何实现大数据的HTTP GET,避免Request Timeout错误



我正在开发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)
};

最新更新