Gibt es eine Möglichkeit verschiedene Arten von einer WCF REST-Methode zurückzukehren?

StackOverflow https://stackoverflow.com/questions/140255

  •  02-07-2019
  •  | 
  •  

Frage

Ich versuche, einen Web-Service zu schreiben, um spec und es erfordert eine andere Antwort Körper je nachdem, ob das Verfahren erfolgreich abgeschlossen wurde oder nicht. Ich habe versucht, zwei verschiedene Klassen Datacontract zu schaffen, aber wie kann ich sie zurückgeben und haben sie richtig serialisiert?

War es hilfreich?

Lösung

Die Antwort ist Ja , aber es ist schwierig, und Sie verlieren starke Typisierung auf Ihrer Schnittstelle. Wenn Sie geben ein Strom , dann könnten die Daten xml, Text, oder sogar um ein binäres Bild. Für Datacontract Klassen, würden Sie dann die Daten serialisiert mit dem DataContractSerializer .

Sehen Sie die BlogSvc und insbesondere die RestAtomPubService.cs WCF-Dienst für weitere Details. Beachten Sie, wird dieser Quellcode zeigen Ihnen auch, wie verschiedene Arten von Daten in eine WCF Rest-Methode zu akzeptieren, die einen Inhaltstyp Mapper erfordert.

Andere Tipps

Der beste Weg, um anzuzeigen, dass Ihre WCF Webservice wäre fehlgeschlagen ist eine FaultException zu werfen. Es gibt Einstellungen in Ihrem Dienst web.config-Dateien, die der gesamte Fehlermeldung erlauben das Client als Teil des Fehlers übergeben werden.

Ein weiterer Ansatz kann sowohl die Ergebnisse aus der gleichen Basisklasse oder Schnittstelle zu erben sein. Der Dienst würde eine Instanz des Basistyps zurück. Anschließend können Sie das Knowntype Attribut verwenden Sie den Client, der mehrere Typen zurückgegeben werden können zu informieren. Kommen Sie, daran zu denken, könnte es möglich sein, Object als Basistyp zu verwenden, aber ich habe es nicht versucht.

eine dieser beiden Ansätze Failing, können Sie ein benutzerdefiniertes Ergebnis Objekt erstellen, das sowohl ein Ergebnis und Fehlereigenschaften und Ihren Client enthält, kann dann entscheiden, welche Vorgehensweise zu nehmen. Ich hatte diesen Ansatz für Silverlight 2 zu verwenden, da Beta 2 noch nicht vollständig Fehlerverträge unterstützen. Es ist nicht schön, ich würde normalerweise nicht empfehlen, aber wenn es der einzige Weg ist, das funktioniert oder Sie das Gefühl, es ist der beste Ansatz für Ihre Situation ist ...

Wenn Sie Probleme mit ADO.NET Data Services haben, habe ich weniger Erfahrung.

Hier einige Informationen bei der Umsetzung FaultContracts

Wenn Sie ein XML-basierte Bindung verwenden, dann glaube ich, gibt es keine Möglichkeit, das zu tun ist. Eine einfache Lösung wäre in diesem Fall nur einen Teil der Nachricht Flagge hat, wenn es ein Fehler war, und speichern Sie die Fehlerinformationen irgendwo, wenn nötig. Für ein JSON Bindung Sie in der Lage sein können, ein Verfahren zu verwenden, die ein Objekt zurückgibt, dann wieder zwei verschiedene Arten von Objekten. Wenn ich mich richtig erinnere (was selten ist), das ist möglich, weil die JavaScriptSerializer Klasse Reflexion verwendet, wenn das Objekt sauber von Serialisierung Attribute ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top