我們在發佈WCF SOAP服務時遇到了一些問題,並且被我們的客戶之一使用。的問題是,客戶使編碼爲ISO-8859-1,這導致錯誤消息的SOAP請求:默認情況下,爲什麼WCF不支持其他編碼,而不支持UTF-8和UTF-16?
HTTP/1.1 415無法處理該消息,因爲該內容類型「文本/ XML;字符集=異-8859-1'不是預期的類型'text/xml;字符集= UTF-8' 。
顯然,根據http://msdn.microsoft.com/en-us/library/ms751486(v=VS.90).aspx,WCF只支持UTF-8和UTF-16大端。問題是,這些問題還討論了SO:
- Calling a webservice that uses ISO-8859-1 encoding from WCF
- WCF Exception: Text Message Encoding and ISO-8859-1 Encoding
雖然我同意,Unicode是首選,我不是在一個位置,迫使我們的客戶改變他們的客戶端,所以我將不得不修復我們的服務。
它讓我感到困惑,我需要將一些MSDN作者編寫的> 150行代碼放入我的項目中 - 我無法維護該代碼或對其承擔責任。我也花了相當長的一段時間給谷歌尋求解決方案,並嘗試去理解它們,我覺得這是浪費時間來處理WCF可以處理的東西。
我的問題是:有什麼好的理由讓微軟以這種方式實現WCF?爲什麼SOAP不應該使用ISO-8859-1有技術原因嗎?對我而言,這似乎打破了Postel的法則,拒絕幾乎任何XML解析器都可以處理的消息。