【问题标题】:JSON requests and responses in WCFWCF 中的 JSON 请求和响应
【发布时间】:2013-03-30 15:29:25
【问题描述】:

我正在尝试以 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 中触发它。

【问题讨论】:

  • 这是一个基于个人经验的建议:如果可能,请改用 Web API。摆脱了 WCF 的负担,我现在很开心。
  • 不可能。我找到了问题,然后我会回答我自己的问题。

标签: c# json wcf


【解决方案1】:

发现问题。感谢 SvcTracingTool,我发现所有这些都是由于序列化问题造成的,正如引发的异常所说:

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

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

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多