设为静态时,HttpClient如何处理多个地址?

时间:2018-09-21 07:55:59

标签: c# asp.net

浏览.NET文档时,我偶然发现了 HttpClient 文档。建议在那里为整个应用程序创建一个(大概是静态的)客户端实例,如下所示(从链接中的文档复制):

public class GoodController : ApiController  
{  
    // OK  
    private static readonly HttpClient HttpClient;  

    static GoodController()  
    {  
        HttpClient = new HttpClient();  
    }  
} 

这样做的原因是在重负荷下不耗尽可用的插座数量。

但是,假设我们使用这个HttpClient通过包装器类将请求发送到不同的地址,例如:

public class HttpClientWrapper
{
    private static readonly HttpClient ClientInstance;

    static HttpClientWrapper()
    {
        ClientInstance = new HttpClient();
    }

    public async Task<HttpResponseMessage> Send(string address, HttpContent content)
    {
        return await ClientInstance.PostAsync(address, content);
    }
}

然后HttpClient可能会向不同的地址发出多个请求,这应该是一个单例(关于我在本示例中不确定的内容)。

问题是:

1。如何正确实施文档中的建议以使其像第二个示例中的行为一样(能够发送到其他地址而不会耗尽套接字池)?

2。当HttpClient是静态/单个时,HttpClient如何处理对不同地址的并发多个请求?它会跟踪所有地址还是覆盖HttpClient内部的某些设置(例如BaseAddress)和错误地址(或引发异常)?

0 个答案:

没有答案