Aplicando [WebInvoke (ResponseFormat = WebMessageFormat.Json)] en el archivo de configuración

Estoy escribiendo lo que me refiero como un servicio web WCF POJ (JSON simple): uno que toma y emite JSON estándar sin nada de lo que a ASP.NET Ajax le gusta agregar.

Parece que hay tres pasos para lograr esto:

Cambie "enableWebScript" a "webHttp" en la etiqueta del punto finalDecora el método con [WebInvoke (ResponseFormat = WebMessageFormat.Json)]Agregue un encantamiento de [AspNetCompatibilityRequirements (RequireMode = AspNetCompatibilityRequirementsMode.Allowed)] al contrato de servicio

Todo esto está funcionando bien para mí: puedo pasar y me devuelven un buen JSON.

Si elimino el atributo WebInvoke, recibo un XML devuelto, por lo que ciertamente está haciendo lo que se supone que debe hacer. Pero me parece extraño que la opción para especificar la salida JSON aparezca aquí y no en el archivo de configuración. Digamos que también quería exponer mi método como un punto final XML. ¿Cómo haría esto? Actualmente, la única forma en que puedo ver sería tener un segundo método que haga exactamente lo mismo pero que no tenga WebMethodFormat.Json especificado. ¿Luego enjuagar y repetir para cada método en mi servicio? Yuck

Especificar que la salida se debe serializar a JSON en el atributo parece ser completamente contrario a la filosofía de WCF, donde el servicio se implementa de manera agnóstica de transporte y codificación, dejando los detalles desagradables de cómo se moverán los datos al archivo de configuración.

¿Hay una mejor manera de hacer lo que quiero hacer? ¿O estamos atrapados con este atributo incómodo? ¿O no entiendo WCF lo suficiente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta