WCF 休息服务不返回 JSON 数据。但它适用于 XML

Posted

技术标签:

【中文标题】WCF 休息服务不返回 JSON 数据。但它适用于 XML【英文标题】:WCF Rest Service is not returning JSON data. But It works for XML 【发布时间】:2015-09-15 20:10:48 【问题描述】:

服务合同信息如下 服务合同:

 [OperationContract]
    [FaultContract(typeof(DcCustomFaultMessage))]        
    [WebInvoke(Method="GET", ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "/GetCustomData")]
    List<DcCustomData> GetCustomData();

以及此处的配置详细信息 配置:

<system.serviceModel>
<services>
  <service name="MyService" behaviorConfiguration="MyServiceBehavior">
    <endpoint address="" binding="webHttpBinding"  bindingConfiguration="MyServiceBinding" behaviorConfiguration="web" contract="IMyService"/>
  </service>     
</services>    
<behaviors>
  <serviceBehaviors>
    <behavior name="MyServiceBehavior">
      <serviceDebug includeExceptionDetailInFaults="True"/>
      <serviceTimeouts transactionTimeout="05:00:00"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
      <serviceMetadata httpGetEnabled="True"/>      
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web" >
      <webHttp helpEnabled="true" automaticFormatSelectionEnabled="false" defaultOutgoingResponseFormat="Json" />
    </behavior>
  </endpointBehaviors>
</behaviors>
<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" defaultOutgoingResponseFormat="Json"/>
  </webHttpEndpoint>
</standardEndpoints>  
<bindings>
  <webHttpBinding>
    <binding name="MyServiceBinding">
      <security mode="None"/>
    </binding>
  </webHttpBinding>
</bindings>    
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />    
<diagnostics performanceCounters="All"/>    

当我调试时,GetCustomData() 返回列表。但是当我在浏览器上检查它时什么都没有返回..没有错误信息。请帮帮我

【问题讨论】:

如果我更改 ResponseFormat = WebMessageFormat.Xml ,它适用于 Xml\ 【参考方案1】:

请配置 WCF 消息记录并使用 svctraceviewer 工具查看可能在幕后发生的实际错误:

<configuration>
<system.diagnostics>
    <trace autoflush="true" />
    <sources>
      <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
        <listeners>
          <add name="wcfTraceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="E:\Errors\WcfTrace.svclog" traceOutputOptions="DateTime" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
 </configuration>

https://msdn.microsoft.com/en-us/library/ms731859%28v=vs.110%29.aspx

【讨论】:

以上是关于WCF 休息服务不返回 JSON 数据。但它适用于 XML的主要内容,如果未能解决你的问题,请参考以下文章

WCF 休息服务.. 将数据表转换为 XML

如何使用 Json.Net 从我的 WCF 休息服务(.NET 4)返回 json,而不是用引号括起来的字符串?

使用 JSON 对 WCF 服务进行分页

想将图像从 android 发布到 WCF 休息服务

WCF 休息 WebInvoke 获取方法不起作用返回 404 错误

在 WCF 休息服务中处理 404