JSONPBehaviour и несколько форматов из службы WCF

У меня есть служба WCF, в которой я хотел бы создавать XML и JSON в зависимости от шаблона URI. Итак, в моем сервисном контракте у меня есть такие методы, как следующие

[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 для отладки и т. Д.

Есть идеи, как я могу получить и то, и другое?


person Rob Stevenson-Leggett    schedule 30.04.2010    source источник


Ответы (1)


Вместо разделения типов ответов путем создания «виртуальной» конечной точки с помощью UriTemplate, например «/ xml / data», просто определите несколько конечных точек с соответствующими привязками. Вы можете использовать один метод и поместить все атрибуты в один метод.

e.g.

<endpoint address="json"....
<endpoint address="jsonp"....
<endpoint address="xml" ....
person Sky Sanders    schedule 10.05.2010
comment
Отличная идея. Спасибо. - person Rob Stevenson-Leggett; 17.05.2010