Я думаю, вы сможете сделать это довольно легко, используя в контракте на обслуживание разные методы, которые имеют разные форматы ответов:
interface IYourService
{
[OperationContract]
[WebGet(UriTemplate="/YourMethod/XML", ResponseFormat=WebMessageFormat.Xml)]
SomeReturnObject YourMethodAsXml(.....);
[OperationContract]
[WebGet(UriTemplate="/YourMethod/JSON", ResponseFormat=WebMessageFormat.Json)]
SomeReturnObject YourMethodAsJson(.....);
}
и оба метода могут затем вызывать общую базовую функцию, которая выполняет фактическое вычисление / поиск данных или все, что вы делаете.
Я бы сказал, что для этого не нужно никакой большой войны за конфигурацию, и это решило бы как минимум два из трех ваших пунктов (XML и JSON).
JSONP изначально не поддерживается в WCF, но, как показано в статье, на которую вы ссылались, вы можете довольно легко добавить это поведение. Однако для включения этого расширения WCF требуется некоторая настройка конфигурации. Но, насколько я понимаю, это должно быть единовременно на вашем сервере.
Если вы действительно не можете справиться с этой настройкой конфигурации, вы, конечно, можете получить пользовательский WebServiceHostFactoryWithJSONPSupport
из WebServiceHostFactory
, используемый для служб WCF REST, и добавить необходимые расширения (например, поведение служб и т. Д.) В Ваш хозяин фабрики. Класс не запечатан, так что это должно быть достаточно просто (по крайней мере, теоретически :-)).