WCF服务返回含特殊字符数据致客户端接收报错的解决方法
WCF服务返回特殊字符导致客户端接收错误的解决方案
核心原因
该错误本质是服务端与客户端的字符编码不匹配,特殊字符(如👍)需要UTF-8编码支持,而WCF默认采用UTF-16编码传输文本,导致解码失败。
解决步骤
1. 统一服务端与客户端的绑定编码为UTF-8
在服务端的web.config和客户端的app.config中,修改WCF绑定配置,强制使用UTF-8编码传输文本:
服务端配置示例(basicHttpBinding):
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="Utf8EnabledBinding"> <!-- 配置UTF-8编码 --> <textMessageEncoding writeEncoding="utf-8" /> </binding> </basicHttpBinding> </bindings> <services> <service name="YourNamespace.YourService"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="Utf8EnabledBinding" contract="YourNamespace.IYourService" /> </service> </services> </system.serviceModel>
客户端对应配置:
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="Utf8EnabledBinding"> <textMessageEncoding writeEncoding="utf-8" /> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://xxxx/xx.svc" binding="basicHttpBinding" bindingConfiguration="Utf8EnabledBinding" contract="YourServiceReference.IYourService" /> </client> </system.serviceModel>
2. 配置服务端全局响应编码
在服务端web.config的<system.web>节点下添加UTF-8编码配置,确保HTTP响应的编码统一:
<system.web> <globalization requestEncoding="utf-8" responseEncoding="utf-8" /> </system.web>
3. REST风格WCF服务的额外配置
如果是WebHttpBinding的REST服务,需同时配置端点行为确保响应格式与编码匹配:
<system.serviceModel> <bindings> <webHttpBinding> <binding name="Utf8WebBinding"> <textMessageEncoding writeEncoding="utf-8" /> </binding> </webHttpBinding> </bindings> <behaviors> <endpointBehaviors> <behavior name="RestBehavior"> <webHttp defaultOutgoingResponseFormat="Json" /> </behavior> </endpointBehaviors> </behaviors> <services> <service name="YourNamespace.YourRestService"> <endpoint address="" binding="webHttpBinding" bindingConfiguration="Utf8WebBinding" behaviorConfiguration="RestBehavior" contract="YourNamespace.IYourRestService" /> </service> </services> </system.serviceModel>
4. 验证数据契约序列化
确保数据契约中的字符串属性未被限制字符集,保持默认的[DataMember]标记即可:
[DataContract] public class YourDataModel { [DataMember] public string ContentWithSpecialChars { get; set; } }
内容的提问来源于stack exchange,提问作者user1577227
相关产品推荐
相关产品推荐

