2012-01-20 32 views
2

我們在發佈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:

雖然我同意,Unicode是首選,我不是在一個位置,迫使我們的客戶改變他們的客戶端,所以我將不得不修復我們的服務。

它讓我感到困惑,我需要將一些MSDN作者編寫的> 150行代碼放入我的項目中 - 我無法維護該代碼或對其承擔責任。我也花了相當長的一段時間給谷歌尋求解決方案,並嘗試去理解它們,我覺得這是浪費時間來處理WCF可以處理的東西。

我的問題是:有什麼好的理由讓微軟以這種方式實現WCF?爲什麼SOAP不應該使用ISO-8859-1有技術原因嗎?對我而言,這似乎打破了Postel的法則,拒絕幾乎任何XML解析器都可以處理的消息。

回答

2

顯然,這是允許在SOAP 1.2說明書中,見4.2節:

A結合,如果使用XML信息集的XML序列化,可能要求 一個特定的字符編碼或一組編碼的是用過的。

在這種情況下,WCF選擇僅支持UTF-8和UTF-16,而不支持其他編碼。

0

一種解決方法是使用HttpWebRequest類以「舊時代」方式使用該服務,如here所述。你將不得不處理純Xml來提出請求和其他很酷的事情,但工作正常!

相關問題