代码之家  ›  专栏  ›  技术社区  ›  Rob Stevenson-Leggett

来自wcf服务的jsonpbehavior和多种格式

  •  0
  • Rob Stevenson-Leggett  · 技术社区  · 14 年前

    我有一个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 回复  |  直到 14 年前
        1
  •  1
  •   Sky Sanders    14 年前

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

    例如

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