【问题标题】:Can't a WCF SOAP service return JSON as output?WCF SOAP 服务不能将 JSON 作为输出返回吗?
【发布时间】:2015-02-05 20:47:50
【问题描述】:

历史


我基本上是一个前端 (android) 开发人员,从不需要创建 Web 服务 相反,我处于消费端。 现在这个 WCF 业务势不可挡,而且我认为学习曲线非常复杂。

任务


我需要创建一个简单的 SOAP 服务,暂时是 hello world,它需要输入 XML,但返回 JSON。

我不确定为什么我们在互联网上没有类似的查询,这让我想知道这是否根本不可能?

这是我到目前为止所拥有的。

当前进度


我的合同

[ServiceContract]
    public interface IHelloWorldService
    {
        [OperationContract]
        String GetMessage(String name);
    }

我的合同实现

public string GetMessage(string name)
        {
            return "Hello World from " + name + "!";
        }

我的服务配置(在 Web.Config 中。我已在 asp.net 网站中托管此服务)

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="WebBehavior">
          <webHttp defaultOutgoingResponseFormat="Json" />
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <services>
      <service name="MyWcfServices.HelloWorldService"          behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint address="" binding="wsHttpBinding"       behaviorConfiguration="WebBehavior"     contract="MyWcfServices.IHelloWorldService"/>
        <endpoint contract="IMetadataExchange"            binding="mexHttpBinding" address="mex"/>
      </service>
    </services>
  </system.serviceModel>

问题


  1. SOAP 是否与 XML 紧密结合?这样您就无法将 JSON 作为输出发送?
  2. 发送 JSON 作为输出是否需要转到 REST 范例?
  3. 我是否每次都得到一个 XML,因为我使用的是带有 HTTP 标头的 WCFStorm 小提琴并默认发送 XML mime 类型?
  4. 如何测试返回 JSON 的 WCF 服务?我有任何测试客户吗?我下载了一个名为 Wizdler 的 Chrome 扩展,但由于某种原因,它只适用于绑定“basicHttpBinding”。有人告诉我,如果我想创建一个 SOAP 服务,我不能使用这个绑定。

如果你们能指出我正确的方向,我真的很感激。另外,我在这个网络服务大会上只有 2 天大,所以我为我的天真道歉。

【问题讨论】:

  • 您不必二选一。 WCF 服务可以配置为返回 SOAP 、XML 或 JSON,具体取决于客户端的请求。
  • @EZI OP 的要求是通过 SOAP 返回 json。
  • @TomRedfern 我不这么认为。这将需要两种反序列化,一种用于soap,一种用于json(就像在另一个xml中返回一个xml)。为什么会有人想做?可以更好地返回纯soap或xml或json的服务(可以由http协议的Accept标头确定)吗?
  • @TomRedfern 想到了一种服务,它可以像使用soap 的传统Web 服务一样,同时使用restful 服务或xml-rpc 服务。是的,WCF 可以做到。
  • @EZI Tom 是正确的。我想通过 SOAP 做 JSON。我现在意识到这是一个反常现象。我实际上是整个行业的新手。所以我犯了这个初学者的错误。我已经纠正了我的做法。我正在通过 JSON 做 REST

标签: c# web-services wcf rest soap


【解决方案1】:

SOAP 完全依赖 XML 来提供消息传递服务,因此如果您真的想要/需要返回 JSON,那么您需要将它包装在 SOAP XML 主体中的 CDATA 中。然而,与 SOAP 不同的是,REST 不必使用 XML 来提供响应,因此您可以将数据输出为其他格式,例如 JSON。

http://blog.smartbear.com/apis/understanding-soap-and-rest-basics/

您可能需要考虑使用WCF 来提供REST-ful 服务,而不是基于SOAP 的服务。

https://msdn.microsoft.com/en-us/magazine/dd315413.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多