JSONPBehaviour и несколько форматов из сервиса WCF - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть сервис 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 для отладки и т. Д.

Любые идеи о том, как я могу иметь оба?

1 Ответ

1 голос
/ 11 мая 2010

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

, например

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