Domanda

Recentemente ho iniziato a leggere su l'utilizzo webHttpBinding in WCF e di essere in grado di consumare servizi REST, però, sono stato perplesso su questo per un po 'ora.

Sto scrivendo un servizio che rende una singola richiesta per un dato api, tuttavia, può restituire uno dei molte risposte.

Ad esempio, la risposta generica:

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

Tuttavia, se qualcosa dovesse non valido nella richiesta in uscita o il servizio stesso è stato rispondere sperimentando qualsiasi tipo di problema di una risposta di ritorno potrebbe essere:

<ErrorResponse>
    <Message />
</ErrorResponse>

Pedram Rezaei ha avuto un grande post su consumo di servizi REST , che è dove prendo in prestito la maggior parte delle mie informazioni da. Da quello che posso dire, siamo in grado di creare un oggetto fino a quando l'oggetto è definita attributi serializzabili. La questione di essere, non c'è nessuna condizione alla quale classe da creare (ErrorResponse / ActualResponse).

Non sono sicuro se dovrei essere guardando una sorta di funzionalità TryParse che invia la richiesta iniziale e cattura l'errore se non deserializzazione può verificarsi o se v'è un approccio più elegante.

Sono abbastanza nuovo per il mondo WCF, quindi esiste la possibilità che possa essere del tutto affaccia qualcosa!

È stato utile?

Soluzione

Penso che si può prendere in prestito una certa pratica da SOAP, che ha una gerarchia in questo modo:

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

Non sto suggerendo che si utilizza SOAP, sto suggerendo che si impara dal disegno impiegato da SOAP. Cosa SOAP non c'è da incorporare la risposta positiva (o nelle tue parole "reale") all'interno del corpo, o restituiscono un sapone: Guasto all'interno del corpo.

un successo in SOAP potrebbe essere simile a questo:

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

, mentre un guasto potrebbe essere simile a questo:

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

Nel tuo caso, potrebbe essere questo:

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

o

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

E serializzazione XML è davvero bravo in questo. . .

Ma sembra che tu abbia alcun controllo sulla busta. Il fatto è che si può ottenere più risposte diverse. Per gestire questo, si potrebbe avvolgere la risposta reale ricevuta in una busta XML artificiosa, e deserializzare il risultato di che .

Se si ottiene ... , avvolgerlo in una busta deserializable per ottenere qualcosa di simile ... , quindi deserializzare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top