WCF中的JSON请求和响应

时间:2013-04-08 13:54:47

标签: c# json wcf

我正在尝试以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序列化和反序列化的e客户端代理? 如果我打开帮助页面,我实际上可以在方法列表中看到该方法,但我无法从URL中触发它。

1 个答案:

答案 0 :(得分:0)

发现问题。感谢SvcTracingTool,我发现所有这些都是由序列化问题引起的,因为提出的异常说:

  

InnerException消息''类型'xxxxxxxxx'无法序列化为JSON,因为其IsReference设置为'True'。 JSON格式不支持引用,因为没有用于表示引用的标准化格式。要启用序列化,请在类型或相应类型的父类上禁用IsReference设置。有关详细信息,请参阅InnerException。

现在,下一步是理解为什么WCF返回404错误而不是异常。