2009-07-24 42 views
5

Tengo un servicio web que devuelve JSON, pero ahora me gustaría modificarlo para permitir que los llamadores especifiquen una función de devolución de llamada para que el retorno pase de: JSON DATA a specificFunction (JSON DATA); La forma en que estoy devolviendo JSON en este momento es simplemente devolviendo una instancia de un objeto y haciendo que .NET haga su magia de serialización, si cambio a solo devolver una cadena, puedo agregar el nombre de la función y los corchetes alrededor de los datos, pero luego termino con comillas en la declaración, porque es una cadena y no las quiero. Entonces, ¿cómo puedo hacerlo?Devolver JSON envuelto en una función de devolución de llamada desde un servicio web WCF REST

La razón de esto es que queremos desarrolladores que llaman nuestra API para poder utilizar la etiqueta script dinámico como se explica aquí http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html

Respuesta

5

La técnica que busca se llama JSONP (JSON con relleno).

Ver How to support JSONP in WCF services:

El JsonPEncoder es un codificador de envoltura en el codificador WCF JSON. Delega la mayoría de las llamadas al codificador envuelto. Los métodos WriteMesage han sido anulados para rellenar el mensaje saliente con el método de devolución de llamada. El JsonBehavior se usa en la operación de servicio para habilitar la codificación JSONP para el funcionamiento de . El parámetro de consulta de el URI que contiene el nombre de la función de devolución de llamada se especifica como la propiedad del comportamiento.

+0

Wow. Había oído hablar de JSONP, pero no sabía que enviaba el nombre de la función de devolución de llamada. ¿Algún enlace a qué navegadores admiten esa sintaxis src = expression? –

1

No sé qué versión de HTML que está utilizando, pero en todas las versiones que he usado, el atributo src en una etiqueta de script tiene que ser una URL. De alguna manera están usando una función en su lugar, y no veo que funcione.

¿De verdad ha visto funcionar una etiqueta de script dinámica?

+0

No lo he usado personalmente pero, por lo que yo sé, se puede hacer. Hay ejemplos de servicios web que vuelven en el estilo que busco, por ejemplo http://www.geonames.org/export/JSON-webservices.html – mbehan

+0

No me preocupan tanto estos servicios como yo. los navegadores Alguien más actualizado puede corregirme, pero no espero que otra cosa que no sea una URL funcione en el atributo src. –

+0

independientemente, cualquier ayuda sobre cómo formatear la devolución según sea necesario será muy apreciada :) – mbehan

1

Sé que es un hilo viejo, pero parece que todo el mundo insiste en cambiar el WCF para apoyar JSONP cuando eso no es claramente lo que pidió el cartel. Y publiqué aquí y forums.asp.net y nadie se tomó el tiempo para responder.

Terminé regresándolo como una secuencia. Esto hace que se use el modo "crudo" y WCF no tocará la respuesta. Enlace: http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx.

+0

¡He estado trabajando en este problema desde ayer por la mañana! ¡La publicación de blog de Carlos y tú me salvó la retaguardia! ¡¡Muchas gracias!! – CodeCanuck

Cuestiones relacionadas