首页 > 解决方案 > 如何有效地使用 HTTPClient (.Net 4.5) 向不同服务器发送请求?

问题描述

我正在使用旧版 ASP.NET 应用程序,并希望使用 HTTPClient 将 HTTP 请求发送到少数不同的服务器(即使用不同的 BaseAddresses)。我读过很多帖子说应该在应用程序的生命周期中使用单个 HTTPClient 实例以避免“套接字耗尽”。但我认为,在这种情况下,使用相同的实例向不同的服务器发送请求可能不可行。

因此,我正在考虑编写一个简单的工厂方法,它将接受基地址并返回一个新的(如果它不存在)或为该特定基地址预先配置的 HTTPClient 的现有实例。

对 HTTPClient 实例的进一步调用将从 ASP.Net 页面进行,并且由于多个用户可以同时请求一个页面,我想知道并发连接是否会超过 HTTPClient 底层 ServicePoint 上设置的最大限制(默认情况下为 2对于非 ASP.Net 主机)。

有人可以建议,如果使用工厂方法听起来足够好,或者有没有更好的解决方案来解决这个问题?我还需要考虑将并发连接限制设置为更高的值吗?

提前致谢!

标签: c#dotnet-httpclient

解决方案


  1. 每个主机一个HttpClient实例在这里是完全合适的。套接字耗尽通常发生在数千个。您应该对“少数”主机没问题。无论如何,一个套接字是特定于 1 个主机的,因此通过使用具有多个主机的单个实例,您在套接字保护方面一无所获。HttpClient

  2. 是的,我肯定会考虑ServicePointManager.DefaultConnectionLimit在这种情况下提升。多高?显然取决于您的情况,但对于大多数托管环境,100 甚至更多应该是完全安全的。


推荐阅读