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