2013-08-06 96 views
1

我正在開發一個使用Web服務的Windows Phone 8應用程序。這個特定的Web服務需要一個具有實體主體的GET請求。System.Net.Http.HttpClient是否支持使用實體正文發送GET請求?

我正在使用System.Net.Http.HttpClient發送此請求,我已成功地使用它發送各種其他Web請求(GET,POST和PUT)。這是第一個包含有效內容的GET請求,因此包含Content-Type和Content-Length標頭。

該請求失敗,像以下內容的異常:

'TaskHost.exe'(CLR C:\ Windows \ System32下\ coreclr.dll:Silverlight的應用程序域):加載「C:\ Windows \ System32下\烯-US \ mscorlib.debug.resources.dll」。模塊沒有符號。 System.Windows.ni.dll中發生類型'System.Net.ProtocolViolationException'的異常,並且未在託管/本機邊界之前處理 mscorlib中發生了類型'System.Net.ProtocolViolationException'的第一次機會異常。 ni.dll 在mscorlib.ni.dll中發生類型'System.Net.ProtocolViolationException'的異常,並且未在託管/本機邊界之前處理

包含帶有GET請求的有效內容有點不尋常,但根據對我的研究,沒有明確禁止的RFC。

我沒有選擇更改Web服務。 System.Net.Http.HttpClient徹底不允許GET實體正文?如果沒有,是否有任何解決方法?

謝謝。

回答

1

我知道這是一段時間,因爲你問這個,但這裏無論如何。

雖然在GET請求的主體中發送有效內容可能不會違反RFC的客戶端,但它違背了常規做法。 RFC的做的說的是,一個服務器對這樣的請求進行調用,決不會只查看除了請求URI和Host:頭之外的任何東西,以便確定它的響應應該是什麼。

從在RFC2616 HTTP 1.1規範引用,第5.2節表示:「由因特網請求所標識的準確的資源是通過檢查兩者的Request-URI和Host頭部字段來確定。」它沒有提到請求主體。

這意味着,即使您試圖執行的操作不違反任何RFC,WP8應用程序所使用的Web服務也是。如果你沒有選擇,只能使用它,那麼看起來你將不得不推出你自己的HTTP-ish客戶端,我猜你可能已經完成了。 System.Net.Http.HttpClient中的現成解決方案不會表現出在與兼容服務器通信時絕不會使用的行爲。