Escribo lo que me refiero a un servicio web WCF POJ (Plain Old JSON) - uno que toma y emite JSON estándar sin ninguno de los basura que ASP.NET Ajax le gusta agregar a ella.Aplicando [WebInvoke (ResponseFormat = WebMessageFormat.Json)] en el archivo de configuración
Parece que hay tres pasos para lograr esto:
- Cambio "enableWebScript" a "webHttp" en la etiqueta del punto final
- Decorar con el método [WebInvoke (ResponseFormat = WebMessageFormat.Json)]
- Añadir un encantamiento de [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] para el contrato de servicio
Todo funciona bien para mí, puedo pasar y me devuelven un buen JSON.
Si elimino el atributo WebInvoke, obtengo XML devuelto en su lugar, por lo que ciertamente está haciendo lo que se supone que debe hacer. Pero me parece extraño que la opción de especificar la salida JSON aparezca aquí y no en el archivo de configuración. Digamos que quería exponer mi método como un punto final XML también. ¿Cómo haría esto? Actualmente, la única forma que puedo ver es tener un segundo método que haga exactamente lo mismo, pero que no tenga especificado WebMethodFormat.Json. Entonces enjuague y repita para cada método en mi servicio? Yuck.
Especificar que la salida debe ser serializada a JSON en el atributo parece ser completamente contraria a la filosofía de WCF, donde el servicio se implementa de una manera independiente de transporte y codificación, dejando los desagradables detalles de cómo serán los datos movido 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 suficientemente profundo?
Gracias por hacer esta pregunta – JeremyWeir