【问题标题】:Why doesn't WCF support other encodings than UTF-8 and UTF-16 by default?为什么 WCF 默认不支持 UTF-8 和 UTF-16 以外的其他编码?
【发布时间】:2012-02-14 20:58:03
【问题描述】:

我们发布的 WCF SOAP 服务存在一些问题,并被我们的一位客户使用。问题是客户发出编码为 ISO-8859-1 的 SOAP 请求,这会导致错误消息:

HTTP/1.1 415 无法处理消息,因为内容类型 'text/xml;charset=iso-8859-1' 不是预期的类型 'text/xml; charset=utf-8'。

显然,WCF 仅支持 UTF-8 和 UTF-16 大端,根据http://msdn.microsoft.com/en-us/library/ms751486(v=VS.90).aspx。在关于 SO 的这些问题中也讨论了这个问题:

虽然我同意首选 unicode,但我不能强迫我们的客户改变他们的客户,所以我必须修复我们的服务。

我需要将一些 MSDN 作者编写的超过 150 行代码放入我的项目中,这让我很烦恼——我无法维护该代码或对此负责。我也花了相当长的时间在谷歌上寻找解决方案并尝试理解它们,我觉得这对于 WCF 可以开箱即用的东西来说是浪费时间。

我的问题是:Microsoft 是否有充分的理由以这种方式实施 WCF? SOAP 不应使用 ISO-8859-1 是否有技术原因?对我来说,这似乎违反了 Postel 定律,拒绝了几乎所有 XML 解析器都可以真正处理的消息。

【问题讨论】:

    标签: wcf soap encoding iso-8859-1


    【解决方案1】:

    显然,SOAP 1.2 规范中允许这样做,请参阅第 4.2 节:

    绑定,如果使用 XML 信息集的 XML 序列化,可以强制 使用特定的字符编码或一组编码。

    在这种情况下,WCF 选择仅支持 UTF-8 和 UTF-16,不支持其他编码。

    【讨论】:

      【解决方案2】:

      一种解决方法是使用 HttpWebRequest 类以“旧时代”的方式使用服务,如 here 所述。您将不得不处理纯 Xml 来发出请求和其他很酷的事情,但工作正常!

      【讨论】:

        猜你喜欢
        • 2016-08-06
        • 1970-01-01
        • 1970-01-01
        • 2011-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-31
        • 2012-06-30
        相关资源
        最近更新 更多