2012-12-30 57 views
6

我使用System.Net.Http.HttpClient將一系列請求從控制檯應用程序發佈到REST API,並將JSON響應反序列化爲強類型對象。我的實現是這樣的:.NET HttpClient在幾個請求後掛起(除非Fiddler處於活動狀態)

using (var client = new HttpClient()) 
{ 
    var content = new StringContent(data, Encoding.UTF8, "text/html"); 
    var response = client.PostAsync(url, content).Result; 

    response.EnsureSuccessStatusCode(); 

    return response.Content.ReadAsAsync<MyClass>().Result; 
} 

不過,我遇到非常相似,一個在this question,由此,當請求通過提琴手路由一切正常,說明一個問題,但它的第四或第五請求時後掛起提琴手被禁用。

如果問題的原因是相同的,我想我需要做更多的事情HttpClient讓它在每次請求後完全釋放資源,但我找不到任何代碼示例顯示如何執行此操作。

希望有人能指出我正確的方向。

非常感謝,

回答

8

你是不是在配置對象HttpResponseMessage的。這可以使服務器保持開放流,並且在填充了單個服務器的流的一些配額之後,不再發送更多請求。

using (var client = new HttpClient()) 
{ 
    var content = new StringContent(data, Encoding.UTF8, "text/html"); 
    using(var response = client.PostAsync(url, content).Result) 
    {  
     response.EnsureSuccessStatusCode(); 
     return response.Content.ReadAsAsync<MyClass>().Result; 
    } 
} 
+0

謝謝安德魯 - 這是一個生命的救星。事實上,在使用HttpWebRequest之前,我看到過這個問題,並且解決方案是相同的,但是如何使用HttpClient代碼模式來做到這一點並不明顯。再次感謝。 –

+0

這裏還有別的東西在發生。這裏唯一的流是傳遞給分配給響應消息的Content屬性的StreamContent對象的NetworkStream。當像這樣使用HttpClient時,響應主體會自動緩衝,任何不可搜索的流在緩衝時會自動處理。沒有必要使用HttpCompletionOption.ResponseContentRead處理由HttpClient檢索的HttpResponseMessage。 –

相關問題