IIS托管WCF服务启用Gzip压缩后报内容类型不匹配错误求助
问题分析与解决方案
错误原因
你把原配置中的textMessageEncoding替换成binaryMessageEncoding并启用Gzip压缩后,服务的消息编码方式从文本SOAP格式变为了二进制SOAP格式,此时服务期望的请求内容类型是application/soap+msbin1+gzip,但SOAP UI仍然发送传统的application/soap+xml;charset=UTF-8格式请求,两者不匹配导致报错。你的需求是对原有文本SOAP消息做Gzip压缩,而非切换到二进制编码,原修改方向有误。
正确配置方案
要在保持文本SOAP消息格式的前提下实现Gzip压缩,需使用gzipMessageEncoding作为外层包装器,包裹原有的textMessageEncoding,同时保留httpTransport(IIS托管WCF服务必需)。修改后的绑定配置如下:
<customBinding> <binding name="SOAPBinding"> <!-- 启用消息层Gzip压缩,内部保留原文本编码配置 --> <gzipMessageEncoding innerMessageEncoding="textMessageEncoding"> <textMessageEncoding messageVersion="Soap11WSAddressing10" /> </gzipMessageEncoding> <!-- HTTP传输层配置,若需要传输层压缩可在此添加compression="GZip" --> <httpTransport /> </binding> </customBinding>
额外注意事项
- 测试时需确保SOAP UI发送的请求携带
Accept-Encoding: gzip请求头,服务才会返回带有Content-Encoding: gzip的压缩响应。 - 若同时需要传输层(HTTP层面)的压缩,可在
httpTransport节点添加compression="GZip"属性,但通常消息层压缩已满足需求。
内容的提问来源于stack exchange,提问作者Osprey1999
相关产品推荐
相关产品推荐

