2014-01-07 35 views
1

我正在使用BCL版本的HttpClient(可用here)在便携式类库中使用。如何在BCL的HttpClient上设置最大连接?

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

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

+1

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

回答

1

HttpClient使用HttpWebRequest封面,因此您设置以同样的方式限制连接。

ServicePointManager.DefaultConnectionLimit = 10; 

奇怪的是,即使这个值的缺省值2,如果你不设置明确的,默认值被忽略,所以这就是为什么你看到的连接无限量。

+0

ServicePointManager位于何处?它似乎没有暴露在我的PCL项目或WinRT项目中。 – grimus

+0

@grimus嗯,废话。你是对的,我不认为这个类可以在PCL库中访问。它是隐藏的。 –

3

如果您使用适应/启发模式来创建您的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

相关问题