Aplicando [WebInvoke (ResponseFormat = WebMessageFormat.Json)] no arquivo de configuração

Estou escrevendo o que estou me referindo como um serviço Web WCF POJ (JSON Simples) - que pega e emite JSON padrão com nenhuma porcaria que o ASP.NET Ajax gosta de adicionar a ele.

Parece que existem três etapas para fazer isso:

Altere "enableWebScript" para "webHttp" na tag do terminalDecore o método com [WebInvoke (ResponseFormat = WebMessageFormat.Json)]Adicione um encantamento de [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] ao contrato de serviço

Tudo está funcionando bem para mim - posso passar e estou sendo devolvido ao JSON simples e agradável.

Se eu remover o atributo WebInvoke, retornarei o XML, portanto ele certamente está fazendo o que deve fazer. Mas me parece estranho que a opção para especificar a saída JSON apareça aqui e não no arquivo de configuração. Digamos que também queira expor meu método como um ponto de extremidade XML - como eu faria isso? Atualmente, a única maneira que eu vejo é ter um segundo método que faça exatamente a mesma coisa, mas não tenha o WebMethodFormat.Json especificado. Em seguida, enxágue e repita para todos os métodos em meu serviço? Que nojo.

A especificação de que a saída deve ser serializada para JSON no atributo parece ser completamente contrária à filosofia do WCF, onde o serviço é implementado é uma maneira independente de transporte e codificação, deixando os detalhes desagradáveis de como os dados serão movidos para o diretório arquivo de configuração.

Existe uma maneira melhor de fazer o que eu quero fazer? Ou estamos presos a esse atributo estranho? Ou não entendo o WCF profundamente o suficiente?

questionAnswers(1)

yourAnswerToTheQuestion