Транспорт может сохранять объект поставщика прокси-учётных данных, выбранный при создании его менеджера пула. Замена WebProxy.Credentials после этого не является надёжной операцией переключения учётной записи.

Создайте маршрут и учётную запись вместе, прежде чем использовать клиент:

var proxy = new System.Net.WebProxy(proxyEndpoint)
{
    Credentials = new System.Net.NetworkCredential(proxyUser, proxyPassword)
};
var handler = new System.Net.Http.HttpClientHandler
{
    UseProxy = true,
    Proxy = proxy
};
var client = new System.Net.Http.HttpClient(handler);

Конечная точка и учётные данные берутся из конфигурации приложения. Для второй личности создайте другой обработчик; другой HttpClient, использующий первый обработчик, использует и его политику.

Пользовательский поставщик ICredentials может отвечать на последующие вызовы, но не может переобозначить установленный туннель как другую учётную запись. Назначение одного глобального имени пользователя/пароля вокруг асинхронных вызовов оставляет время вызова и принадлежность учётной записи в конфликте.

При необходимости повторного использования держите ограниченный набор клиентов. Слейте старую работу перед освобождением её транспорта. Новый обработчик на каждый запрос расходует пулы соединений; хранение всех исторических учётных записей навсегда растит их без границы.

Похожие статьи