如何有效地使用 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)。
有人可以建议,如果使用工厂方法方法听起来足够好,或者是否有更好的解决方案来解决这个问题?我还需要考虑将并发连接限制设置为更高的值吗?
提前致谢!
一个HttpClient
实例每个主机在这里是完全合适的。套接字耗尽通常发生在数以千计的时候;您应该可以接受 "handful" 的主机。无论如何,一个套接字特定于 1 个主机,因此通过对多个主机使用单个 HttpClient
实例,您在套接字保护方面一无所获。
是的,在这种情况下我肯定会考虑提升 ServicePointManager.DefaultConnectionLimit
。多高?显然取决于您的情况,但对于大多数托管环境,100 甚至更多应该是绝对安全的。
我正在使用遗留 ASP.NET 应用程序,并希望使用 HTTPClient 将 HTTP 请求发送到少数不同的服务器(即具有不同的 BaseAddresses)。我读过很多帖子说单个 HTTPClient 实例应该用于应用程序的生命周期以避免 "sockets exhaustion"。但我认为,在这种情况下,使用相同的实例向不同的服务器发送请求可能不可行。
所以我正在考虑编写一个简单的工厂方法,它将接受基地址并将 return 一个新的(如果它不存在)或一个现有的 HTTPClient 预配置实例对于那个特定的基址。
对 HTTPClient 实例的进一步调用将从 ASP.Net 页面进行,并且由于多个用户可以同时请求一个页面,我想知道并发连接数超过 HTTPClient 基础上设置的最大限制是否会出现问题ServicePoint(对于非 ASP.Net 主机默认为 2)。
有人可以建议,如果使用工厂方法方法听起来足够好,或者是否有更好的解决方案来解决这个问题?我还需要考虑将并发连接限制设置为更高的值吗?
提前致谢!
一个
HttpClient
实例每个主机在这里是完全合适的。套接字耗尽通常发生在数以千计的时候;您应该可以接受 "handful" 的主机。无论如何,一个套接字特定于 1 个主机,因此通过对多个主机使用单个HttpClient
实例,您在套接字保护方面一无所获。是的,在这种情况下我肯定会考虑提升
ServicePointManager.DefaultConnectionLimit
。多高?显然取决于您的情况,但对于大多数托管环境,100 甚至更多应该是绝对安全的。