2009-07-06 10 views
2

最近WCFでWebHttpBindingの使用法を読んでいて、RESTサービスを利用できるようになりましたが、今はちょっと困っています。WCFが複数の可能なREST応答を使用しています

私は、特定のapiに対して1回のリクエストを行うサービスを作成していますが、多くの回答のうちの1つを返すことができます。例えば

、一般的な応答:

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

しかし、何かが発信要求や応答サービス自体に無効であれば、問題の任意の並べ替えを経験していた返す応答は次のようになります。

<ErrorResponse> 
    <Message /> 
</ErrorResponse> 

Pedram Rezaeiはconsuming REST servicesに投稿しました。ここでは私の情報をほとんど借りています。私は、オブジェクトに直列化可能な属性が定義されている限り、オブジェクトを作成できます。問題は、クラスを作成する条件がないこと(ErrorResponse/ActualResponse)です。

デシリアライゼーションが発生しない場合、またはより洗練されたアプローチがある場合に、初期要求を送信し、エラーをキャッチするTryParse機能をいくつか見てください。

私はWCFの世界ではかなり新しいので、可能性があるので、何かを完全に見落としているかもしれません!

答えて

0

私はあなたがそうのような階層構造を持っているSOAP、からいくつかの練習を借りることができると思います。

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

私はあなたがで採用デザインから学ぶことを示唆しているよ、あなたはSOAPを使用することを示唆していませんよ石鹸。 SOAP内で成功した(または実際には「実際の」)応答は、またはのBody内にsoap:Faultを返します。

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

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

障害は次のようになりますながら:

<ServiceResponse> 
    <ActualResponse> ... </ActualResponse> 
</ServiceResponse> 
:あなたのケースでは

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

を、あなたがこれを持っているかもしれません

または

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

そして、XMLシリアル化は本当に優れています。 。 。

しかし、あなたは封筒を制御できないようです。実際には、複数の異なる回答を得ることができます。これを処理するには、実際の応答を考案されたXMLエンベロープにラップし、の結果を逆シリアル化してとすることができます。

あなたは<ActualResponse> ... </ActualResponse >を取得した場合、ActualResponse > < > ServiceResponse <のような何かを得るためにdeserializableエンベロープでラップ...</ActualResponse > </ServiceResponse >、次にデシリアライズします。

関連する問題