Mantenga un controlador .NET independiente para cada cuenta de proxy
Cree controladores separados para cuentas simultáneas en lugar de reemplazar WebProxy.Credentials en un transporte que ya atiende solicitudes.
Un transporte puede conservar el objeto proveedor de credenciales de proxy elegido al crear su administrador de grupo. Reemplazar WebProxy.Credentials después no es una operación fiable de cambio de cuenta.
Cree la ruta y la cuenta juntas antes de usar el 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);El punto de conexión y las credenciales provienen de la configuración de la aplicación. Cree otro controlador para una segunda identidad; otro HttpClient que comparta el primer controlador también comparte su política.
Un proveedor ICredentials personalizado puede responder a desafíos posteriores, pero no puede reetiquetar un túnel establecido como otra cuenta. Asignar un único usuario/contraseña global en torno a llamadas asíncronas deja el momento del desafío y la propiedad de la cuenta en conflicto.
Mantenga un conjunto acotado de clientes cuando se necesite reutilización. Vacíe el trabajo antiguo antes de desechar su transporte. Un controlador nuevo por solicitud desperdicia grupos de conexiones; conservar todas las cuentas históricas para siempre los hace crecer sin límite.