【问题标题】:JSONPBehaviour and multiple formats from WCF service来自 WCF 服务的 JSONPBehaviour 和多种格式
【发布时间】:2011-02-14 04:11:21
【问题描述】:

我有一个 WCF 服务,我想根据 URI 模板生成 XML 和 JSON。所以在我的服务合同中,我有如下方法

[ServiceContract]
public interface MultiFormatContract
{
  [OperationContract]
  [WebGet(UriTemplate="/json/data", ResponseFormat = WebMessageFormat.Json)]
  [JSONPBehavior(callback = "callback")]
  public MySerializableObject GetJSONData()


  [OperationContract]
  [WebGet(UriTemplate = "/xml/data", ResponseFormat=WebMessageFormat.Xml)]
  public MySerializableObject GetXMLData()
}

我需要支持 JSONP,并已使用 Microsoft REST 示例来支持此功能(在此 http://jasonkelly.net/archive/2009/02/24/using-jquery-amp-jsonp-for-cross-domain-ajax-with-wcf-services.aspx 之后)。然而,这意味着我必须添加一个自定义绑定:

  <customBinding>
    <binding name="jsonpBinding">
      <jsonpMessageEncoding/>
      <httpTransport manualAddressing="true"/>
    </binding>
  </customBinding>

这意味着 WCF 不再使用 textMessageEncoding,即使 JSONPEncoder 覆盖了文本编码器。我的端点无法再生成 Xml。

我不想将消费者锁定到 JSON,我希望能够浏览到我的 Xml 端点以查看用于调试等的 Xml。

关于如何同时拥有两者的任何想法?

【问题讨论】:

    标签: xml wcf json rest jsonp


    【解决方案1】:

    而不是通过使用 UriTemplate 创建一个“虚拟”端点来隔离您的响应类型,例如“/xml/data”,只需使用适当的绑定定义多个端点。您可以使用一个方法并将所有属性放在一个方法上。

    例如

    <endpoint address="json"....
    <endpoint address="jsonp"....
    <endpoint address="xml" ....
    

    【讨论】:

    • 好主意。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 2010-10-17
    • 1970-01-01
    相关资源
    最近更新 更多