2016-02-29 54 views
0

我有一個自定義WebUploadTraceListener : TraceListener,我用它來發送HTTP(並最終HTTPS)POST數據到一個Web服務,將它寫入數據庫。使HttpWebRequest忽略響應

我已經測試了WebClientHttpWebRequest這個做法,經驗上我看到後者有更好的表現。

由於數據的單向性,我不關心服務器的響應。但是我發現如果我不處理HttpWebResponse,我的代碼在第三次寫入時鎖定。我想,這是因爲DefaultConnectionLimit設置,而不是重複使用資源的系統...

Jon Skeet

請注意,你需要處理由request.GetResponse返回WebResponse類的 - 否則根本基礎設施不會知道你已經完成了它,並且將無法重新使用連接。

我想最大限度地發送POST數據的速度,回到主程序儘可能快流越好。由於我正在跟蹤程序流,所以同步寫入更可取,但不是必需的,因爲我總是可以添加包括Tick計數的POST字段。

  1. 是一個HttpWebRequeststream.Write.Net4.0這樣做的最快方法是什麼?
  2. 是否有更便宜的方法來丟棄不需要的響應?

回答

1

Attually,httpRequest.GetResponse只發布的數據服務器,並沒有任何東西下載到客戶端,除了信息告訴客戶請求是否成功服務器處理。

當您撥打GetResponseStream時,您只能得到響應數據。如果即使是關於您不希望收到的請求成功/錯誤的信息,您也無法確定服務器是否成功處理請求。

所以答案是:

  1. 是的,這是對託管代碼的最低水平,除非你想搞砸 與插座(你應該)
  2. 隨着HttpWebRequest,沒有。你幾乎沒有得到任何你不想要的數據 。
+0

謝謝:-)不,我不想在socket級別工作。我需要調用'GetResponse'來關閉/重用連接是否正確? – khargoosh

+0

是的,你說得對。在你的代碼中,'GetResponse()'是自動關閉的,因爲你將它封裝在'using'中。 – Sakura

+1

這是我'使用'它的意圖。再次感謝 :-) – khargoosh