Bre*_*ias 14 .net c# asp.net-web-api dotnet-httpclient
在实例化HttpClient时,一个常见的建议是:
但是,根据这个链接我看到评论,我认为这意味着另一个规则:
HttpClient类实例充当发送HTTP请求的会话.HttpClient实例是应用于该实例执行的所有请求的设置集合.此外,每个HttpClient实例都使用自己的连接池,将其请求与其他HttpClient实例执行的请求隔离开来.
这让我想知道我是否应该为每个与之交互的服务端点创建一个HttpClient实例.通过"服务端点",我的意思是一个不同的基地址.以下各项将是一个独特的"服务端点":
当然,如果我打算使用HttpClient的"BaseAddress"属性,并且如果我正在处理并发调用,那么我将需要每个"service-endpoint"有一个HttpClient实例.
但是,HttpClient允许我明确指定一个绝对地址:
HttpClient client = new HttpClient(...);
client.PostAsJsonAsync("http://foo.net/api/Message/", ...);
client.PostAsJsonAsync("http://bar.com/api/Message/", ...);
client.PostAsJsonAsync("http://wow.gov/api/Message/", ...);
client.PostAsJsonAsync("http://now.com/api/Message/", ...);
client.PostAsJsonAsync("http://mom.org/api/Message/", ...);
client.PostAsJsonAsync("http://dog.com/api/Message/", ...);
Run Code Online (Sandbox Code Playgroud)
上面的代码工作,它正是我想要的当前应用程序我正在构建.但是唠叨的问题仍然存在......如果我将一个HttpClient用于我的应用程序与之通信的所有服务端点,那么我做错了什么?
有没有理由我真的需要上面引文中提到的"连接池隔离"?
但我想知道我是否会损害 HttpClient 的内部工作原理,因为我让许多端点共享相同的连接池。
不,我不认为单个实例HttpClient
会耗尽您的资源,但这实际上取决于您将发出多少并发请求。HttpClient
旨在服务并发请求,通过使用异步 API(如 ( XXXAsync
)),您可以实现这一目标。
我建议不要忘记设置ServicePointManager.DefaultConnectionLimit
为更高的数字,因为它的默认值为 2(并发请求)。
另外,如果您认为单个实例会很快遇到困难,我建议一如既往地分析您的应用程序以了解确切的瓶颈。
归档时间: |
|
查看次数: |
2304 次 |
最近记录: |