JSONPBehaviour和来自WCF服务的多种格式

时间:2010-04-30 09:36:46

标签: xml wcf json rest jsonp

我有一个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以进行调试等。

关于如何兼顾两者的任何想法?

1 个答案:

答案 0 :(得分:1)

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

e.g。

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