为每个代理账户保留独立的 .NET 处理程序
为同时使用的账户分别构建处理程序,而不是在已在处理请求的传输上替换 WebProxy.Credentials。
传输可能会保留创建其池管理器时所选的代理凭据提供程序对象。之后替换 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 提供程序可以响应后续的质询,但无法将已建立的隧道重新标记为另一个账户。在异步调用周围分配一个全局用户名/密码,会使质询时机和账户归属产生冲突。
需要复用时,请保留数量有限的客户端。在释放其传输之前,先排空旧的工作。每个请求都新建处理程序会浪费连接池;永远保留所有历史账户会让它们无限制增长。