2008-09-26 7 views

Antwort

1

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.

+0

Ich habe diese Datei (RestAtomPubService.cs) nicht in der Quelle gefunden, habe ich sie vermisst oder wurde sie entfernt? Vielen Dank. –

+0

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

0

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.

2

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

Verwandte Themen