Я пишу то, что я называю веб-службой WCF POJ (Plain Old JSON) - той, которая принимает и испускает стандартный JSON без всякой хрени, которую ASP.NET Ajax любит добавлять в нее.
Похоже, что для этого есть три шага:
- Измените "enableWebScript" на "webHttp" в теге конечной точки
- Украсить метод с помощью [WebInvoke (ResponseFormat = WebMessageFormat.Json)]
- Добавление заклинания [AspNetCompatibilityRequirements (RequirementsMode
= AspNetCompatibilityRequirementsMode.Allowed)] к контракту на обслуживание
У меня все нормально, я могу пройти, и мне возвращают хороший простой JSON.
Если я удаляю атрибут WebInvoke, то вместо этого мне возвращается XML, поэтому он, безусловно, делает то, что должен делать. Но мне кажется странным, что опция указания вывода JSON появляется здесь, а не в файле конфигурации. Скажем, я тоже хотел представить свой метод как конечную точку XML - как бы я это сделал? В настоящее время единственный способ, которым я могу видеть, - это иметь второй метод, который делает то же самое, но не указывает WebMethodFormat.Json. Затем промыть и повторить для каждого метода в моем сервисе? Тьфу.
Указание, что выходные данные должны быть сериализованы в JSON в атрибуте, кажется, полностью противоречит философии WCF, где служба реализована без учета транспорта и кодирования, оставляя неприятные детали того, как будут перемещаться данные вокруг к файлу конфигурации.
Есть ли лучший способ сделать то, что я хочу сделать? Или мы застряли с этим неловким атрибутом? Или я недостаточно глубоко понимаю WCF?