2009-07-06 54 views
2

我最近開始閱讀有關WCF中的WebHttpBinding使用和能夠消費REST服務,但是,我已經難倒這一個有點現在。WCF消耗多種可能的REST響應

我正在寫一個服務,使單個請求給定的API,但是,可以返回的許多反應之一。

例如,通用迴應:

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

然而,如果事情在傳出請求或響應服務本身正經歷任何類型的問題,是無效的返回響應將是:

<ErrorResponse> 
    <Message /> 
</ErrorResponse> 

Pedram雷扎伊對consuming REST services很大的職位,這是我最借用從我的信息。根據我所知道的,只要對象具有已定義的可序列化屬性,我們就可以創建一個對象。問題在於,創建哪個類沒有任何條件(ErrorResponse/ActualResponse)。

我不確定我是否應該尋找某種功能的TryParse發送初始請求和捕獲錯誤,如果不會發生反序列化或是否有更好的方法。

我是相當新的WCF世界的,可能性是存在的我可能會完全忽視的東西!

回答

0

我想你可以借用SOAP一些練習,其中有像這樣一個層次結構:

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

我不建議你使用SOAP,我建議你從所採用的設計學習肥皂。 SOAP所做的就是在Body中嵌入成功的(或者以你的話說「實際」)響應,返回Body中的soap:Fault

在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 >,包裝在一個信封deserializable得到的東西像<ServiceResponse> <ActualResponse> ...</ActualResponse > </ServiceResponse >,然後反序列化。