WCF SOAP 服务忽略内容类型字符集

Posted

技术标签:

【中文标题】WCF SOAP 服务忽略内容类型字符集【英文标题】:WCF SOAP Service Ignore Content-Type charset 【发布时间】:2017-11-25 15:54:39 【问题描述】:

我有一个新的 WCF 服务,一些现有客户端需要能够与之通信。

有些客户端错误地发送了 Content-Type 标头为 'text/xml; 的 SOAP 请求;字符集=us-ascii'。目前,客户本身无法更改。

当他们发送请求时,他们会收到错误消息:

HTTP/1.1 415 无法处理消息,因为内容类型 '文本/xml; charset=us-ascii' 不是预期的类型 'text/xml; 字符集=utf-8'

有什么方法可以指示 WCF 服务忽略 Content-Type 的字符集并假定为 utf-8?

【问题讨论】:

或许social.msdn.microsoft.com/Forums/vstudio/en-US/… docs.microsoft.com/en-us/dotnet/framework/wcf/extending/… @KScandrett 这个,加上与该论坛帖子上已接受答案的作者的对话就成功了。 很高兴有帮助。不要忘记为可能遇到类似问题的其他人发布并接受您的答案 【参考方案1】:

这可能对您有帮助,如果没有,我将删除答案。我认为这可以在您的上下文中使用,但不太确定,因为没有其他细节。

WebContentTypeMapper 可用于覆盖正在发送的内容类型。这是 WCF 示例集中使用的代码的片段。在此示例中,它接收发送的任何内容类型并将其映射到 json,但您可以根据需要进行调整。

如果您还没有,可以从WCF Samples 下载示例 此示例位于 ..WF_WCF_Samples\WCF\Extensibility\Ajax\WebContentTypeMapper\CS

using System.ServiceModel.Channels;

namespace Microsoft.Samples.WebContentTypeMapper

    public class JsonContentTypeMapper : System.ServiceModel.Channels.WebContentTypeMapper
    
        public override WebContentFormat GetMessageFormatForContentType(string contentType)
        
            if (contentType == "text/javascript")
            
                return WebContentFormat.Json;
            
            else
            
                return WebContentFormat.Default;
            
        
    

【讨论】:

以上是关于WCF SOAP 服务忽略内容类型字符集的主要内容,如果未能解决你的问题,请参考以下文章

为 WCF 消息设置 HTTP 内容类型

WCF:具有不同内容类型的请求/响应

忽略特定 WCF OperationContracts 的内容类型

内容类型应用程序/soap+xml; charset=utf-8 不受服务支持

Java SOAP 消息内容类型

Wcf 服务,我收到此错误:内容类型 text/html;字符集=utf-8