.Net Core HttpClientFactory располагает HttpClientHandler - PullRequest
0 голосов
/ 18 января 2019

Я сейчас настраиваю свой httpclientfactory таким образом

HttpClientHandler httpClientHandler = new HttpClientHandler()
{
    ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }

};

serviceCollection.AddHttpClient("ignoreSSL", c =>
{}).ConfigurePrimaryHttpMessageHandler(h => httpClientHandler);

Чтобы отключить проверку сертификатов безопасности, но при выполнении слишком большого количества запросов я получаю следующее исключение:

Невозможно получить доступ к удаленному объекту. Имя объекта: 'SocketsHttpHandler'.

Я сейчас строю свой httpclient таким образом

HttpClient client = _httpClientFactory.CreateClient("ignoreSSL");

В тестах это решается без httpclientfactory

HttpClient ad = new HttpClient(handler, false);

Больше, чем я ищу, я не могу найти, как сказать httpclientfactory не заставлять обработчик избавляться?

1 Ответ

0 голосов
/ 18 января 2019

Проблема вызвана тем, что один экземпляр HttpClientHandler используется для всех запросов.Задача HttpClientFactory - управлять, объединять и перерабатывать обработчики.

Похоже, фактический вопрос заключается в том, как отключить проверку сертификата при использовании HttpClientFactory.Это требует настройки используемых им обработчиков клиента.

Как видно из документации , это делается с помощью метода ConfigurePrimaryHttpMessageHandler .Из примечаний метода:

Примечания

Делегат должен возвращать новый экземпляр обработчика сообщений при каждом его вызове.

Обработчики, созданные этим методом, будут добавлены в пул обработчиков и использованы другими обработчиками, такими как обработчики повторов Полли.HttpClientFactory будет перерабатывать старые обработчики для обработки изменений регистрации DNS.

Код должен выглядеть следующим образом:

services.AddHttpClient<HttpWrapper>("ignoreSSL")
        .ConfigurePrimaryHttpMessageHandler(() =>
        {
            return new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = (m, c, c, e) => true
            };
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...