【问题标题】:How can I set maximum connections on BCL's HttpClient?如何在 BCL 的 HttpClient 上设置最大连接数?
【发布时间】:2014-01-07 18:28:55
【问题描述】:

我正在使用 BCL 版本的 HttpClient(here)在可移植类库中使用。

有没有办法设置 HttpClient 实例使用的最大连接数限制?

我使用 HttpClient 而不是 HttpWebRequest 的原因之一是,在我的情况下,HttpWebRequest 的连接限制为 2 太低,并且在故意长时间运行请求的情况下会导致问题。通过对每个请求使用一个 HttpClient 实例,我解决了这个限制,但现在似乎导致了相反的问题,因为当一次有很多请求时服务器不堪重负并导致异常被抛出Http客户端。 因此,理想的解决方案是能够设置 HttpClient 使用的连接数,使其大于 2,但小于无限,并且可能更接近 5。

【问题讨论】:

  • 根据我的经验,至少在 Windows 8 中,httpclient 的限制是每个域大约 5-6 个请求。

标签: c# windows-runtime windows-8.1 dotnet-httpclient base-class-library


【解决方案1】:

HttpClient 在幕后使用 HttpWebRequest,因此您以相同的方式设置连接限制。

    ServicePointManager.DefaultConnectionLimit = 10;

奇怪的是,即使此值的默认值为 2,如果您不明确设置它,默认值也会被忽略,这就是为什么您会看到无限数量的连接。

【讨论】:

  • ServicePointManager 位于何处?在我的 PCL 项目或 WinRT 项目中似乎没有暴露。
  • @grimus 嗯,废话。你是对的,我认为 PCL 库中无法访问该类。它被隐藏了。
【解决方案2】:

如果您使用适应/启蒙模式来创建您的 HttpClient 实例,您可以这样做。

在 .NET 工厂中,您将使用 ServicePointManager。对于 WinRT,您可以使用我的 WinRtHttpClientHander:

https://github.com/onovotny/WinRtHttpClientHandler

它将让您访问一个 HttpBaseProtocolFilter 实例,您可以在其中设置 MaxConnectionsPerServer 属性: http://msdn.microsoft.com/en-us/library/windows/apps/windows.web.http.filters.httpbaseprotocolfilter.maxconnectionsperserver.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多