2009-07-24 6 views
5

Ich habe einen Webdienst, der JSON zurückgibt, aber jetzt möchte ich ihn so ändern, dass Anrufer eine Rückruffunktion angeben, sodass die Rückgabe von: JSON DATA an erfolgt angegebeneFunktion (JSON DATA); Die Art und Weise, wie ich JSON gerade zurücksende, besteht darin, eine Instanz eines Objekts zurückzugeben und .NET seine Serialisierungszauber zu machen. Wenn ich nur eine Zeichenfolge zurück gebe, kann ich den Namen der Funktion und die Klammern um die Daten hinzufügen dann lande ich in der Rückkehr mit Anführungszeichen, weil es eine Zeichenfolge ist und ich diese nicht will. Also wie kann ich darüber gehen?Geben Sie JSON in einer Rückruffunktion von einem WCF-REST-Webdienst zurück.

Grund dafür ist, wir wollen die Entwickler fordern unsere API der Lage sein, den dynamischen Script-Tag zu verwenden, wie hier http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html erklärten

Antwort

5

Die Technik, nach der Sie suchen, heißt JSONP (JSON mit Padding).

Siehe How to support JSONP in WCF services:

Die JsonPEncoder ist ein Wickel Encoder auf dem WCF-JSON-Encoder. Es delegiert die meisten Aufrufe an den umschlossenen Encoder. Die WriteMesage Methoden wurden überschrieben, um die ausgehende Nachricht mit der Callback-Methode aufzufüllen. Der JsonBehavior wird für den Dienst verwendet, um die JSONP-Codierung für dieser Operation zu aktivieren. Der Abfrageparameter der URI, der den Rückruf Funktionsname enthält, wird als die CallBack Eigenschaft des Verhaltens angegeben.

+0

Wow. Ich hatte von JSONP gehört, wusste aber nicht, dass der Name der Callback-Funktion gesendet wurde. Irgendwelche Verbindungen, zu denen Browser diese src = Ausdruckssyntax unterstützen? –

1

Ich weiß nicht, welche Version von HTML sie verwenden, aber in allen Versionen das src-Attribut in einem Skript-Tag muss eine URL sein. Sie verwenden stattdessen eine Funktion, und ich sehe das nicht funktionieren.

Haben Sie tatsächlich gesehen, dass ein dynamisches Skript-Tag funktioniert?

+0

Ich habe es nicht persönlich benutzt, aber soweit ich weiß, kann es gemacht werden. Es gibt Beispiele von Webdiensten, die im Stil zurückkommen, nach dem ich suche, zum Beispiel http://www.geonames.org/export/JSON-webservices.html – mbehan

+0

Ich bin nicht so besorgt über diese Dienste wie ich bin die Browser. Jemand, der auf dem neuesten Stand ist, kann mich korrigieren, aber ich erwarte nichts anderes als eine URL, die im src-Attribut funktioniert. –

+0

egal, jede Hilfe, wie Sie die Rücksendung als erforderlich formatieren wird sehr geschätzt :) – mbehan

1

verwende ich weiß, es ist ein alter Thread, aber es scheint, dass jeder darauf besteht, die WCF auf die Veränderung JSONP zu unterstützen, wenn das ist eindeutig nicht das, was das Plakat gefragt. Und ich postete hier und forums.asp.net und niemand nahm sich die Zeit zu antworten.

Ich landete es als Stream zurück. Dies bewirkt, dass der "rohe" Modus verwendet wird und WCF die Antwort nicht berührt. Link: http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx.

+0

Ich arbeite seit gestern Morgen an diesem Problem !! Du und Carlos 'Blog-Post rettete mir den Rücken! Ich danke dir sehr!! – CodeCanuck