Ошибка ниже периодически возникает, когда _httpClientFactory.CreateClient()
используется для отправки запроса на внешние ресурсы.
System.Net.Http.HttpRequestException: при отправке произошла ошибка
запрос. ---> System.IO.IOException: сервер возвратил
неверный или нераспознанный ответ. в асинхронном режиме
System.Net.Http.HttpConnection.SendAsyncCore (HttpRequestMessage
запрос, CancellationToken cancellationToken) Конец внутреннего
исключение при асинхронности
System.Net.Http.HttpConnection.SendAsyncCore (HttpRequestMessage
запрос, CancellationToken CancellationToken) в
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в
асинхронной
System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync (HttpConnection
соединение, запрос HttpRequestMessage, логическое значение
doRequestAuth, CancellationToken cancellationToken) в
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в
асинхронной
System.Net.Http.HttpConnectionPool.SendWithRetryAsync (HttpRequestMessage
request, Boolean doRequestAuth, CancellationToken cancellationToken)
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
в async System.Net.Http.RedirectHandler.SendAsync (HttpRequestMessage
запрос, CancellationToken CancellationToken) в
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в
async System.Net.Http.DiagnosticsHandler.SendAsync (HttpRequestMessage
запрос, CancellationToken CancellationToken) в
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в
асинхронной
Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.SendAsync (HttpRequestMessage
запрос, CancellationToken CancellationToken) в
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в
асинхронной
Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.SendAsync (HttpRequestMessage
запрос, CancellationToken CancellationToken) в
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в
async System.Net.Http.HttpClient.FinishSendAsyncBuffered (Task`1
sendTask, запрос HttpRequestMessage, CancellationTokenSource
cts, Boolean disposeCts) в
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в
асинхронной
IdentityModel.Client.HttpClientTokenRequestExtensions.RequestTokenAsync (??)
public class WebHttpClient
{
private readonly IHttpClientFactory _httpClientFactory;
public WebHttpClient(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task<string> WebRequestAsync(string url)
{
return await _httpClientFactory.CreateClient().WebRequestAsync(url); //intermittent error: An error occurred while sending the request.
}
}
[assembly: WebJobsStartup(typeof(Startup))]
public sealed class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder webJobsBuilder)
{
webJobsBuilder.Services.AddHttpClient();
}
}
Есть решение?
Обновление
static HttpClient имеет проблемы с DNS. Вот почему я стараюсь избегать статического, если это возможно, и при использовании IHttpClientFactory может решить все проблемы.
Но я не уверен, что моя проблема вызвана DNS или чем-то еще.
Может ли типизированный httpclient (или оболочка вокруг httpclient) решить эту проблему? Он прерывистый, поэтому его нелегко воспроизвести.
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.2#typed-clients
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.2#httpclient-and-lifetime-management
Обновление 2
Пожалуйста, смотрите обновленное исключение вверху.