Behåll en separat .NET-hanterare för varje proxykonto
Bygg separata hanterare för samtidiga konton i stället för att ersätta WebProxy.Credentials på en transport som redan betjänar begäranden.
En transport kan behålla proxy-autentiseringsleverantörens objekt som valdes när dess poolhanterare skapades. Att ersätta WebProxy.Credentials efteråt är inte ett tillförlitligt kontobyte.
Skapa rutten och kontot tillsammans innan klienten används:
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);Slutpunkten och autentiseringsuppgifterna kommer från programkonfigurationen. Bygg en annan hanterare för en andra identitet; en annan HttpClient som delar den första hanteraren delar också dess policy.
En anpassad ICredentials-leverantör kan svara på senare utmaningar, men den kan inte ometicera en etablerad tunnel som ett annat konto. Att tilldela ett enda globalt användarnamn/lösenord kring asynkrona anrop lämnar utmaningens timing och kontots ägande i konflikt.
Behåll en begränsad uppsättning klienter när återanvändning behövs. Töm gammalt arbete innan transporten kasseras. En ny hanterare per begäran slösar med anslutningspooler; att behålla varje historiskt konto för alltid får dem att växa utan gräns.