如何有效地使用 HTTPClient (.Net 4.5) 向不同的服务器发送请求?

How to effectively use HTTPClient (.Net 4.5) for sending request to different servers?

我正在使用遗留 ASP.NET 应用程序,并希望使用 HTTPClient 将 HTTP 请求发送到少数不同的服务器(即具有不同的 BaseAddresses)。我读过很多帖子说单个 HTTPClient 实例应该用于应用程序的生命周期以避免 "sockets exhaustion"。但我认为,在这种情况下,使用相同的实例向不同的服务器发送请求可能不可行。

所以我正在考虑编写一个简单的工厂方法,它将接受基地址并将 return 一个新的(如果它不存在)或一个现有的 HTTPClient 预配置实例对于那个特定的基址。

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

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

提前致谢!

  1. 一个HttpClient实例每个主机在这里是完全合适的。套接字耗尽通常发生在数以千计的时候;您应该可以接受 "handful" 的主机。无论如何,一个套接字特定于 1 个主机,因此通过对多个主机使用单个 HttpClient 实例,您在套接字保护方面一无所获。

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