2009-07-24 4 views
5

J'ai un service Web retournant JSON, mais maintenant je voudrais le modifier pour permettre aux appelants de spécifier une fonction de rappel afin que le retour passe de: JSON DATA à specifiedFunction (JSON DATA); La façon dont je retourne JSON en ce moment est juste en retournant une instance d'un objet et ayant .NET faire sa magie de sérialisation, si je change juste en renvoyant une chaîne je peux ajouter le nom de la fonction et les parenthèses autour des données alors je me retrouve avec des guillemets dans le retour, parce que c'est une chaîne et je ne les veux pas. Alors, comment puis-je y aller?Retour JSON enveloppé dans une fonction de rappel à partir d'un service Web WCF REST

Raison de ce que nous voulons développeurs appeler notre API pour pouvoir utiliser la balise de script dynamique comme expliqué ici http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html

Répondre

5

La technique que vous recherchez est appelée JSONP (JSON avec rembourrage).

Voir How to support JSONP in WCF services:

Le JsonPEncoder est un codeur d'emballage sur le codeur WCF JSON. Il délègue la plupart des appels au codeur enveloppé. Les méthodes WriteMesage ont été remplacées pour combler le message sortant avec la méthode de rappel. Le JsonBehavior est utilisé sur l'opération de service pour activer le codage JSONP pour cette opération. Le paramètre de requête l'URI qui contient le nom de la fonction de rappel est spécifié en tant que propriété CallBack du comportement.

+0

Wow. J'avais entendu parler de JSONP, mais je ne savais pas qu'il avait envoyé le nom de la fonction de rappel. Des liens vers quels navigateurs supportent-ils la syntaxe src = expression? –

1

Je ne sais pas quelle version de HTML qu'ils utilisent, mais dans toutes les versions que j'ai utilisé, l'attribut src dans une balise de script doit être une URL. Ils utilisent en quelque sorte une fonction, et je ne vois pas cela fonctionner.

Avez-vous déjà vu un script de script dynamique?

+0

Je ne l'ai pas utilisé personnellement mais pour autant que je sache, cela peut être fait. Il existe des exemples de services Web qui reviennent dans le style que je suis après, par exemple http://www.geonames.org/export/JSON-webservices.html – mbehan

+0

Je ne suis pas si préoccupé par ces services que je suis les navigateurs. Quelqu'un de plus à jour peut me corriger, mais je ne m'attends pas à autre chose qu'une URL pour travailler dans l'attribut src. –

+0

malgré tout, toute aide sur la façon de formater le retour au besoin sera grandement appréciée :) – mbehan

1

Je sais qu'il est un vieux fil, mais il semble que tout le monde insiste sur le changement de WCF pour soutenir JSONP quand c'est pas clairement ce que l'affiche a demandé. Et j'ai posté ici et forums.asp.net et personne n'a pris le temps de répondre.

J'ai fini par le renvoyer sous forme de flux. Cela provoque l'utilisation du mode "brut" et WCF ne touche pas la réponse. Lien: http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx.

+0

Je travaille sur ce problème depuis hier matin !! Toi et le blog de Carlos m'ont sauvé! Merci beaucoup!! – CodeCanuck

Questions connexes