排查WCF服务“请求消息正文反序列化错误”问题
排查WCF服务400错误及反序列化问题
核心问题定位
服务器报错“根级别数据无效”通常并非请求JSON本身的语法问题,而是WCF消息格式配置不匹配或请求头设置错误导致——你仅修改了返回字段,未改动请求模型,请求JSON的语法大概率是合规的。
具体排查步骤
- 检查Postman请求头的Content-Type
WCF默认的DataContractJsonSerializer要求请求头Content-Type必须为application/json,而非text/plain或其他类型。很多时候Postman会默认设置错误,手动指定该字段即可。 - 验证服务端消息格式配置
确认服务端web.config/app.config中,终结点绑定是否开启JSON支持。比如webHttpBinding需配置对应行为:<endpointBehaviors> <behavior name="JsonBehavior"> <webHttp defaultOutgoingResponseFormat="Json"/> </behavior> </endpointBehaviors> - 清除请求内容的隐形字符
复制的请求JSON可能带有BOM(字节顺序标记)或首尾空白字符。可将内容粘贴到无BOM的文本编辑器重新保存,或在Postman中手动重新输入关键字段测试。 - 确认请求模型未被误修改
尽管你仅改动返回字段,仍需检查请求对应的DataContract类(如GetProductsRequest)的属性名、[DataMember(Name="xxx")]标记是否与JSON键完全匹配,避免意外改动导致反序列化失败。 - 用WCF客户端代理测试
若Postman仍报错,用Visual Studio生成WCF客户端代理调用服务。如果客户端能正常请求,说明问题出在Postman的请求配置;若客户端也报错,再聚焦服务端反序列化配置排查。
快速验证方案
在Postman中执行以下操作:
- 将请求头
Content-Type设置为application/json; charset=utf-8 - 清空请求正文,重新粘贴并删除首尾空白字符
- 重新发送请求测试
内容的提问来源于stack exchange,提问作者David Shochet
相关产品推荐
相关产品推荐

