传输可能会保留创建其池管理器时所选的代理凭据提供程序对象。之后替换 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 提供程序可以响应后续的质询,但无法将已建立的隧道重新标记为另一个账户。在异步调用周围分配一个全局用户名/密码,会使质询时机和账户归属产生冲突。

需要复用时,请保留数量有限的客户端。在释放其传输之前,先排空旧的工作。每个请求都新建处理程序会浪费连接池;永远保留所有历史账户会让它们无限制增长。

相关文章