Question

J'ai récemment commencé à lire à propos de l'utilisation de WebHttpBinding dans WCF et d'être en mesure de consommer des services REST, cependant, j'ai perplexe sur celui-ci pour un peu maintenant.

J'écris un service qui fait une demande unique à un api donné, cependant, peut retourner l'une des nombreuses réponses.

Par exemple, la réponse générique:

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

Cependant, si quelque chose était invalide dans la demande sortante ou le service répondant lui-même était une sorte de connaît question une réponse de retour serait:

<ErrorResponse>
    <Message />
</ErrorResponse>

Pedram Rezaei avait un grand poste sur la consommation de services REST , qui est l'endroit où j'emprunte la plupart de mes renseignements. D'après ce que je peux dire, nous pouvons créer un objet aussi longtemps que l'objet a des attributs sérialisables défini. La question étant, il n'y a pas de condition à laquelle la classe à créer (ErrorResponse / ActualResponse).

Je ne suis pas sûr si je devrais regarder une sorte de fonctionnalité TryParse qui envoie la demande initiale et attrape l'erreur si aucune désérialisation peut se produire ou s'il y a une approche plus élégante.

Je suis assez nouveau dans le monde de WCF, donc il est possible que je sois tout à fait sur quelque chose!

Était-ce utile?

La solution

Je pense que vous pouvez emprunter une certaine pratique de SOAP, qui a une hiérarchie comme ceci:

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

Je ne suggère pas que vous utilisez SOAP, je suggère que vous apprenez de la conception employée par SOAP. Qu'est-ce que SOAP n'est la réponse réussie intégrer (ou dans vos mots "réelle") dans le corps, ou renvoient un savon: Défaut dans le corps.

un succès SOAP pourrait ressembler à ceci:

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

alors qu'une faute pourrait ressembler à ceci:

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

Dans votre cas, vous pourriez avoir ceci:

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

ou

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

Et sérialisation XML est vraiment bon à cela. . .

Mais il semble que vous avez aucun contrôle sur l'enveloppe. Le fait est que vous pouvez obtenir plusieurs réponses différentes. Pour gérer cela, vous pouvez envelopper la réponse réelle reçue dans une enveloppe XML artificielle et désérialiser le résultat de que .

Si vous obtenez ... , l'envelopper dans une enveloppe deserializable pour obtenir quelque chose comme ... , puis désérialiser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top