Ich versuche, einen Webdienst nach Spezifikation zu schreiben, und es erfordert einen anderen Antworttext, je nachdem, ob die Methode erfolgreich ausgeführt wird oder nicht. Ich habe versucht, zwei verschiedene DataContract-Klassen zu erstellen, aber wie kann ich sie zurückgeben und sie korrekt serialisieren lassen?Gibt es eine Möglichkeit, verschiedene Typen von einer WCF-REST-Methode zurückzugeben?
Antwort
Die Antwort ist ja aber es ist schwierig, und Sie verlieren auf Ihrer Schnittstelle starke Typisierung. Wenn Sie einen Stream zurückgeben, könnten die Daten XML, Text oder sogar ein Binärbild sein. Für DataContract-Klassen würden Sie dann die Daten mit dem DataContractSerializer serialisieren.
Siehe die BlogSvc und genauer die RestAtomPubService.cs WCF service für weitere Details. Beachten Sie, dass der Quellcode auch zeigt, wie Sie unterschiedliche Datentypen in eine WCF-Restmethode übernehmen, für die ein Inhaltstyp-Mapper erforderlich ist.
Wenn Sie eine XML-basierte Bindung verwenden, glaube ich, dass es keine Möglichkeit gibt, dies zu tun. Eine einfache Lösung würde in diesem Fall nur einen Teil des Nachrichtenflags haben, wenn ein Fehler aufgetreten ist, und die Fehlerinformation irgendwo speichern, wenn dies erforderlich ist. Für eine JSON-Bindung können Sie möglicherweise eine Methode verwenden, die ein Objekt zurückgibt und dann zwei verschiedene Arten von Objekten zurückgibt. Wenn ich mich richtig erinnere (was selten ist), ist das möglich, weil die JavaScriptSerializer-Klasse reflection verwendet, wenn das Objekt keine Serialisierungsattribute enthält.
Der beste Weg, um anzuzeigen, dass Ihr WCF-Web-Service fehlgeschlagen ist, würde eine FaultException auslösen. In den web.config-Dateien des Diensts sind Einstellungen enthalten, mit denen die gesamte Fehlernachricht als Teil des Fehlers an den Client übergeben werden kann.
Ein anderer Ansatz besteht möglicherweise darin, beide Ergebnisse von derselben Basisklasse oder derselben Schnittstelle zu übernehmen. Der Service würde eine Instanz des Basistyps zurückgeben. Sie können dann das KnownType-Attribut verwenden, um den Client darüber zu informieren, dass mehrere Typen zurückgegeben werden können. Wenn ich darüber nachdenke, könnte es möglich sein, Object als Basistyp zu verwenden, aber ich habe es nicht ausprobiert.
Wenn einer dieser Ansätze fehlschlägt, können Sie ein benutzerdefiniertes Ergebnisobjekt erstellen, das sowohl Ergebnis- als auch Fehlereigenschaften enthält. Ihr Client kann dann entscheiden, welche Vorgehensweise gewählt werden soll. Ich musste diesen Ansatz für Silverlight 2 verwenden, da Beta 2 Fehlerverträge noch nicht vollständig unterstützt. Es ist nicht schön, ich würde es normalerweise nicht empfehlen, aber wenn es die einzige Möglichkeit ist, die funktioniert oder Sie glauben, es ist der beste Ansatz für Ihre Situation ...
Wenn Sie Probleme mit ADO.NET Data Services haben, Ich habe dort weniger Erfahrung.
Here's some information bei der Umsetzung FaultContracts
- 1. Gibt es eine Möglichkeit, mehrere Ergebnisse mit einer Unterabfrage zurückzugeben?
- 2. Gibt es eine Möglichkeit, anonyme Methode von Methode zurückzugeben?
- 3. Gibt es eine Möglichkeit, eine einzelne Makrofunktion bereitzustellen, um Werte verschiedener Typen, einschließlich nichts, zurückzugeben?
- 4. Laravel - Gibt es eine Möglichkeit, eine Ansicht zurückzugeben und herunterzuladen?
- 5. ASP.NET MVC - Gibt es eine Möglichkeit, 2 PartialViews zurückzugeben?
- 6. Gibt es eine Möglichkeit, meine Funktion ein dynamisches Array zurückzugeben?
- 7. Gibt es eine einfache Möglichkeit, das FIRST LinqToXML-Ergebnis zurückzugeben?
- 8. Gibt es eine Möglichkeit, Arrays bei der Angabe von Rückgabefeldern in einer Elasticsearch-Abfrage nicht zurückzugeben?
- 9. Gibt es eine Möglichkeit, algebraische Typen in Java zu implementieren?
- 10. Gibt es eine Möglichkeit, lineare Typen in Haskell zu emulieren?
- 11. Scala: Gibt es eine Möglichkeit, Inline-Typen zu erstellen?
- 12. Gibt es eine Möglichkeit, nominale Typen in TypeScript zu erstellen, die primitive Typen erweitern?
- 13. Gibt es eine Möglichkeit, einen Wert über verschiedene Post-Typen mit ACF auszuwählen?
- 14. Gibt es eine einfache Möglichkeit, eine Aufgabe mit einer Ausnahme zurückzugeben?
- 15. Gibt es eine Möglichkeit, Diagramme in verschiedene Projekte zu kopieren?
- 16. Verwenden Sie C#, gibt es eine Möglichkeit, alle Felder, Typen und Daten aus einer Abfrage abzurufen?
- 17. Gibt es eine Möglichkeit, nur Dokumente aus einer SharePoint-Webdienstsuche zurückzugeben?
- 18. Gibt es eine Möglichkeit, MySQL dazu zu bringen, die von einem INSERT-Befehl erzeugte Zeile zurückzugeben?
- 19. Gibt es eine Möglichkeit Benutzereingabe von BotFramework innerhalb einer Schleife
- 20. Gibt es eine Möglichkeit, Json von einer Subdomain zu laden?
- 21. Gibt es eine Möglichkeit, DateTime im ISO-Format von einer asp.net-Webmethode anstelle von JSON-Format zurückzugeben?
- 22. Gibt es eine Möglichkeit, Mehrfacheinspritzung zu propagieren?
- 23. Gibt es eine Möglichkeit, über alle Typen in einem Namespace in einer foreach-Schleife zu gehen?
- 24. Gibt es eine Möglichkeit, einer Objekteigenschaft eine mehrzeilige Zeichenfolge zuzuweisen?
- 25. Gibt es eine Möglichkeit, verschiedene Heroku-Regionen basierend auf dem Standort unter einer Domain zu verwenden?
- 26. Gibt es eine Möglichkeit, dass es jemals PHP.NET gibt?
- 27. Gibt es eine Möglichkeit, einer Tabelle eine Mindesthöhe hinzuzufügen?
- 28. Gibt es eine Möglichkeit, Code-Replikation über verschiedene Konstruktoren einer Klasse zu vermeiden?
- 29. Gibt es eine Möglichkeit, unterschiedliche Anzeigenamen für verschiedene iOS-Geräte in einer universellen App anzugeben?
- 30. Gibt es eine Möglichkeit, eine Struktur mit Elementen verschiedener Typen in C zu durchlaufen?
Ich habe diese Datei (RestAtomPubService.cs) nicht in der Quelle gefunden, habe ich sie vermisst oder wurde sie entfernt? Vielen Dank. –
Wir haben uns seither von WCF für REST entfernt, da es für unsere Anforderungen nicht flexibel genug war. Ich denke, die Datei sollte noch in der Geschichte sein. – JarrettV