IHttpClientFactory временная ошибка: ошибка при отправке запроса с приложениями-функциями Azure - PullRequest
0 голосов
/ 25 апреля 2019

Ошибка ниже периодически возникает, когда _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

Пожалуйста, смотрите обновленное исключение вверху.

...