2012-08-13 56 views
0

我正在使用由第三方開發的SOAP接口,但正在返回無效HTTP標頭,如下所示。讀取具有錯誤HTTP標頭的SOAP響應

HTTP/1.0 200 OK 
Server: SMBDK_1/2.3.0 
Date: Thu, 09 Aug 2012 18:59:14 GMT 
Connection: close 
Content-Length: 670 
Content-Type: text/html; charset=ISO-8859-1 
Content-Type: text/xml 
Expires: Thu, 09 Aug 2012 18:59:14 GMT 
Last-Modified: Thu, 09 Aug 2012 18:59:14 GMT 

請注意,有2個內容類型標記。我爲這個VB項目使用VS2008。我有這個連接的服務參考,並且可以發送請求並接收響應。我使用MSDN示例創建了一個CustomTextMessageEncoder來讀取text/html; charset=ISO-8859-1的響應。這對單個變量返回是有效的,但是數組永遠不會正確讀入。他們總是空着的。我正在使用Web調試代理,並可以看到SOAP響應中存在數組信息,但它實際上從未實際通過。我認爲這是由於錯誤的標題(?)。我嘗試解碼消息爲text/xml; charset=ISO-8859-1並得到了相同的結果...空數組返回。

有沒有人有任何建議如何處理這種情況?我是否需要手動反序列化此消息還是有更好的方法?

+1

當然,正確的做法是讓第三方修復他們的錯誤。 HTTP標準已經存在了一段時間:他們不遵循這樣一個基本標準的藉口是什麼?而且,問問自己 - 如果他們甚至無法正確執行HTTP,他們會搞砸哪些_else_? – 2012-08-14 02:31:06

+0

他們軟件的最新版本以text/xml格式回覆; utf-8編碼和一切都很好。我認爲有人最終決定升級,更改編碼等等。不幸的是,我必須連接到這個服務,並讓它在他們的新系統上再次運行。現在我想我正面臨着靜靜地等待他們釋放這個錯誤的修復方法,或者爲了獲得我所需要的信息而繞過它。 – yelowsnw2 2012-08-14 14:55:09

+0

text/xml聽起來像SOAP 1.1,BTW。另外,你真的必須是_quiet_嗎?他們的開發人員可能會想知道他們有一個bug。 – 2012-08-14 17:08:32

回答

0

最後,這些錯誤的標題阻止了Visual Studio正確讀取數組。
我最終需要在內存中的XMl文檔中捕獲整個響應,然後打開它並使用xmlNodeList手動讀取數組中的數據。

+0

你可能已經[刪除了有問題的標題](http://stackoverflow.com/questions/11455273/remove-server-from-http-response-in-wcf),但那麼你應該假設哪一個正確嗎? – CodeCaster 2013-07-03 13:21:48