2014-01-07 36 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

相關問題