Frage

Ich habe vor kurzem angefangen habe über die WebHttpBinding Verwendung in WCF Lesen und REST-Services in der Lage, verbrauchen, aber ich habe für ein bisschen jetzt auf dieser stumped.

ich einen Dienst ich schreibe, die eine einzige Anforderung an einen bestimmten api macht, kann jedoch eine von vielen Antworten zurück.

Zum Beispiel ist die allgemeine Antwort:

<ActualResponse>
<ResponseItem>
    <Name />
    <Area />
</ResponseItem>
</ActualResponse>

Allerdings, wenn etwas in der ausgehenden Anforderung ungültig waren oder der antwortende Dienst selbst war eine Rückkehr Antwort jede Art von Problem auftritt wäre:

<ErrorResponse>
    <Message />
</ErrorResponse>

Pedram Rezaei hatte einen großen Beitrag auf REST-Services raubend, das ist, wo ich die meisten meiner Informationen leihen aus. Von dem, was ich sagen kann, können wir ein Objekt, solange das Objekt serializable Attribute definiert erstellen. Das Problem ist, es gibt keine Bedingung, auf die Klasse erstellt (Error / ActualResponse) werden.

Ich bin nicht sicher, ob ich in einer Art TryParse Funktionalität, die die anfängliche Anforderung sendet und fängt den Fehler, wenn kein Deserialisierung auftreten kann, oder wenn es ein elegantere Ansatz.

suchen sollte

Ich bin ziemlich neu in der WCF-Welt, so dass die Möglichkeit besteht, ich mit Blick auf etwas ganz sein kann!

War es hilfreich?

Lösung

Ich glaube, Sie von SOAP einige Übung ausleihen können, die eine Hierarchie hat in etwa so:

<soap:Envelope>
    <soap:Body>
        ... message contents
    </soap:Body>
</soap:Envelope> 

Ich schlage nicht vor, dass Sie SOAP verwenden, ich bin darauf hindeutet, dass Sie aus dem Design von SOAP verwendet lernen. Welche SOAP hat sich die erfolgreiche (oder in Ihren Worten "Ist") Antwort im Körper einzubetten, oder zurückgeben Seife: Störung im Körper.

ein Erfolg in SOAP könnte wie folgt aussehen:

<soap:Envelope>
    <soap:Body>
        <ActualResponse>... </ActualResponse>
    </soap:Body>
</soap:Envelope> 

, während ein Fehler könnte wie folgt aussehen:

<soap:Envelope>
    <soap:Body>
        <soap:Fault>... </soap:Fault>
    </soap:Body>
</soap:Envelope> 

In Ihrem Fall, könnte man diese:

<ServiceResponse> 
     <ActualResponse> ... </ActualResponse>
</ServiceResponse> 

oder

<ServiceResponse> 
     <Fault> ... </Fault>
</ServiceResponse> 

Und XML-Serialisierung ist das wirklich gut. . .

Aber es klingt wie Sie keine Kontrolle über den Umschlag haben. Tatsache ist, dass Sie mehrere unterschiedliche Antworten erhalten können. Um damit umzugehen, können Sie die tatsächliche Antwort wickeln in einem erfundenen XML Umschlag erhalten, und deserialisieren das Ergebnis von , die .

Wenn Sie erhalten ... , wickeln Sie es in einem deserializable Umschlag etwas wie ... zu bekommen, dann deserialisieren.

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