2

最近、WCFでのWebHttpBindingの使用法について読み始め、RESTサービスを利用できるようになりましたが、これについては少し困惑しています。

特定のAPIに対して単一のリクエストを行うサービスを作成していますが、多くの応答の1つを返すことができます。

たとえば、一般的な応答は次のとおりです。

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

ただし、送信要求で何かが無効であるか、応答サービス自体に何らかの問題が発生している場合、応答は次のようになります。

<ErrorResponse>
    <Message />
</ErrorResponse>

Pedram Rezaeiは、RESTサービスの利用について素晴らしい投稿をしました。ここから、ほとんどの情報を借りています。私の知る限り、オブジェクトにシリアル化可能な属性が定義されている限り、オブジェクトを作成できます。問題は、作成するクラス(ErrorResponse / ActualResponse)の条件がないことです。

最初の要求を送信し、逆シリアル化が発生しない場合、またはより洗練されたアプローチがある場合にエラーをキャッチする、ある種のTryParse機能を検討する必要があるかどうかはわかりません。

私はWCFの世界にかなり慣れていないので、何かを見落としている可能性があります。

4

1 に答える 1

0

次のような階層を持つSOAPからいくつかの練習を借りることができると思います。

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

私はあなたがSOAPを使用することを提案しているのではなく、SOAPで採用されている設計から学ぶことを提案しています。SOAPが行うことは、成功した(またはあなたの言葉で言うと「実際の」)応答をBody内に埋め込むかsoap:FaultをBody内に返すことです。

SOAPでの成功は次のようになります。

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

障害は次のようになります。

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

あなたの場合、あなたはこれを持っているかもしれません:

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

また

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

そして、XMLシリアル化はそれが本当に得意です。。。

しかし、エンベロープを制御できないようです。実際には、複数の異なる応答を取得できます。これを処理するために、受信した実際の応答を不自然なXMLエンベロープでラップし、その結果を逆シリアル化することができます。

<ActualResponse> ... </ ActualResponse>を取得した場合は、それを逆シリアル化可能なエンベロープでラップして、<ServiceResponse> <ActualResponse> ... </ ActualResponse> </ ServiceResponse>のようなものを取得してから、逆シリアル化します。

于 2009-07-06T18:41:35.030 に答える