WCF中的JSON请求和响应
本文关键字:求和 响应 请求 JSON 中的 WCF | 更新日期: 2023-09-27 18:07:58
我正试图以JSON格式请求并接收来自WCF web服务(用c#编写)的响应。这是端点的配置:
<service behaviorConfiguration="UserServiceBehavior" name="UserService">
<endpoint address="JSON" binding="webHttpBinding" contract="IUserService"
behaviorConfiguration="JSONEndpointBehavior" bindingConfiguration="" name="RESTEP">
</endpoint>
<endpoint address="" binding="basicHttpBinding" contract="IUserService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
…
<endpointBehaviors>
<behavior name="JSONEndpointBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
方法的注释是这样的:
[WebInvoke(Method = "GET", UriTemplate = "myUriTemplate", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
对于返回CLR类型的方法,它工作得很好:响应是JSON格式的(我想也是请求)。对于返回非clr类型的方法(在我的情况下,代理客户端),如果我尝试发出请求并接收JSON中的响应,服务器会给我带来404错误,但如果我切断这个:
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json
服务器返回一个包含我正在搜索的数据的XML文档。这可能是与客户端代理相关的问题吗?如何生成支持JSON序列化和反序列化的客户端代理?如果我打开帮助页面,我可以在方法列表中看到方法,但我不能从URL中触发它。
发现问题。多亏了SvcTracingTool,我发现所有这些都是由于序列化问题,因为引发的异常说:
现在,下一步是理解为什么WCF返回404错误而不是异常。InnerException消息是'类型'xxxxxxxxx'不能被序列化为JSON,因为它的IsReference设置为'True'。JSON格式不支持引用,因为没有表示引用的标准化格式。要启用序列化,请禁用该类型或该类型的适当父类的IsReference设置。详情请参见InnerException。