2010-12-06 15 views
1

我在重試Microsoft.Http.HttpStageProcessingException超時異常,同時嘗試使用REST Starter工具包的HttpClient。在本地使用時,這一直工作正常,但在遠程時失敗。WCF REST StarterKit HttpClient:遠程HttpClient遠程時 - 在本地或通過本地代理正常工作

客戶端是一個c#進程,作爲Windows服務運行,並使用HttpClient對運行在Tomcat6中的Java應用服務器進行REST調用。當我開始解決這個問題時,我在MSDN的論壇上發現了一個類似的帖子:http://social.msdn.microsoft.com/Forums/en/wcf/thread/88487549-ce45-49d3-95e4-7ed413cbcfbc

不幸的是,我無法將它隔離爲簡單的Content-Length問題。

如果任何人有任何關於如何解決這個問題的建議,我將不勝感激 - 即使這意味着直接使用HttpWebRequest。我明白HttpClient在底層使用HttpWebRequest,但也許它做出了一些假設。

+0

有你和WCF服務器之間的代理? – Aliostad 2010-12-06 13:14:06

+0

你可以顯示你用來閱讀迴應的代碼嗎?我的經驗是,如果你沒有完全使用響應流,請求就會被掛起。 – 2010-12-06 13:32:49

回答

0

如果它通過Fiddler在本地或遠程工作,那麼它是HTTP代理的問題。您當前的配置不使用代理,但默認情況下Fiddler使用爲IE配置的代理。

1

找到解決方案。事實證明,當使用HttpClient時,出站http連接的默認數量似乎是2.在使用ServicePointManager靜態單例將我的客戶端AppDomain的DefaultConnectionLimit設置爲10後,一切正常。因爲我習慣於編寫多線程應用程序並使用新的.NET 4任務 - 所以我真的不喜歡對出站連接進行嚴格的限制。 任何人都可以提供任何鏈接,提供有關低級別.NET Http處理如何工作的詳細信息,以及哪些旋鈕可以控制哪些設置?再次

感謝您的幫助, 鮑勃

沒關係 - 發現自己,應該先用Google搜索 - 對HTTP客戶端協議這個MSDN博客提供什麼下引擎蓋正在進行一個很好的說明: httpclient protocol blog

0

獲取同樣的問題,解決辦法是Dispose方法的響應(可能關閉命名方法可能會更清楚)其他反應仍然佔據插座,你必須增加DefaultConnectionLimit打開新的socket爲每個新的請求,直到最大限制範圍(髒和慢)。

因此,解決辦法是:

HttpResponseMessage resp = this.HttpClient.Delete(uri);//or verb get/post/put 
try { 
    //.... do what you need with response 
} 
finally { 
    resp.Dispose(); //free the socket for a new request 
}