Mantenha um manipulador .NET separado para cada conta de proxy
Crie manipuladores separados para contas simultâneas em vez de substituir WebProxy.Credentials num transporte que já atende pedidos.
Um transporte pode reter o objeto fornecedor de credenciais de proxy escolhido quando o seu gestor de pool foi criado. Substituir WebProxy.Credentials depois disso não é uma operação fiável de troca de conta.
Crie a rota e a conta em conjunto antes de usar o cliente:
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);O endpoint e as credenciais vêm da configuração da aplicação. Crie outro manipulador para uma segunda identidade; outro HttpClient que partilhe o primeiro manipulador também partilha a sua política.
Um fornecedor ICredentials personalizado pode responder a desafios posteriores, mas não pode reetiquetar um túnel estabelecido como outra conta. Atribuir um único nome de utilizador/palavra-passe global em torno de chamadas assíncronas deixa o momento do desafio e a propriedade da conta em conflito.
Mantenha um conjunto limitado de clientes quando for necessário reutilizar. Esvazie o trabalho antigo antes de descartar o seu transporte. Um novo manipulador por pedido desperdiça pools de ligações; manter todas as contas históricas para sempre fá-las crescer sem limite.