【问题标题】:Make my WCF service return json让我的 WCF 服务返回 json
【发布时间】:2011-04-11 20:46:38
【问题描述】:

我试图让我的 WCF 服务方法返回 JSON 对象,但它不起作用,当我在 Web 浏览器中打开它时显示 xml。

如何让这个方法返回 JSON?

我已插入 [WebGet(ResponseFormat = WebMessageFormat.Json)],但这没有帮助

[WebGet(ResponseFormat = WebMessageFormat.Json)]  
protected override IEnumerable<KeyValuePair<string, SampleItem>> OnGetItems()  
{  
   // TODO: Change the sample implementation here  
   if (items.Count == 0)  
   {  
      items.Add("A", new SampleItem() { Value = "A" });  
      items.Add("B", new SampleItem() { Value = "B" });  
      items.Add("C", new SampleItem() { Value = "C" });  
   }  
   return this.items;  
}  

【问题讨论】:

    标签: asp.net wcf


    【解决方案1】:

    为了使其正常工作,您需要在 web.config 和服务的 *.svc 文件中使用 webHttpBindingWebServiceHostFactory 托管它。

    你没有显示任何 web.config 或其他配置 - 所以我不能真正告诉你在做什么。但WebGet 属性中的 JSON 响应格式仅在 REST 样式的 WCF 服务中受支持。 WebGet 属性对于任何基于 SOAP 的绑定都会被忽略,例如basicHttpBindingwsHttpBindingnetTcpBinding 等等。

    有关 REST 样式 WCF 服务的更多信息,请查看 WCF REST Developer Center 并阅读有关如何设置和使用 REST 样式 WCF 服务的信息。

    更新:为了让您的 *.svc 文件作为使用 WebGet 属性并返回 JSON 的 REST 服务正常工作,您需要确保指定正确的服务主机工厂:

    <%@ServiceHost Language="C#" Service="YourService"
                   Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
    

    通过指定 WebServiceHostFactory,您是在告诉 WCF 运行时将此服务用作 REST 服务,然后所有其他部分应自动到位。

    【讨论】:

    • 你给我的例子是,.cs-file
    • 作为服务工作的.svc-file和.csfile有什么区别
    【解决方案2】:

    您是否也设置了 WebHttpBehaviour ?否则,WebGet 不起作用。见MSDN

    而且这个属性适用于服务操作,而不是简单的方法。您没有显示其余的服务,但是我看到的使用 WebGet 的示例在接口(服务合同)中具有此属性。

    【讨论】:

    • 我没有使用任何 indetface,我正在使用 -svc 文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多