2012-03-29 20 views
1

我有2個自定義操作exectuting一個接一個在同一售後服務這樣如何發送到一個服務調用的響應沒有到達管道末端

<actions mep="RequestResponse"> 
    <action name="ActionA" class="ClassA"/> 
    <action name="ActionB" class="ClassB"/> 
</actions> 

假設ActionA做一些驗證通過收到的消息。如果發現該驗證的味精是無效的,請問您發送給有關失敗調用的響應?

現在我行動我定在ActionA消息中的響應,並做了個記號它表明我發現ActionA和ActionB檢查該標記錯誤執行其代碼之前。我發現這個方法很有用,但一個負擔,因爲我所有的活動都開始:

if (!markIspressent) { 
    //Code goes here 
} 
return message. 

我曾試過把ActionA設置響應味精和返回null停止管道,但不工作。我也嘗試另一種方法,我發現拋出一個ActionProcessingFaultException(message,"SomeTextGoesInHere"),但也不能正常工作。 我這個第二個主要問題是ESB試圖重新處理拋出該異常,我不知道我設置成消息的響應,直至ESB放棄並將其發送回味精。但是,放棄需要長達60秒。

所以我的問題是你怎麼能達到了服務管道年底前發送響應味精給調用者。

感謝

回答

3

在早期完成管道的選項有: - 返回NULL; - 拆分業務分爲三(注意Service 1是單向的,並根據你的行動的結果路由到適當的服務) 服務1個

<actions mep="OneWay"> 
    <action name="ActionA" class="ClassA"/> 
    <action name="ActionA1" class="RouteBasedOnMsgContentTo(Service 2 or Service 3)"/> 
</actions> 

服務2

<actions mep="RequestResponse"> 
    <action name="ActionB" class="ClassB"/> 
</actions> 

服務3

<actions mep="RequestResponse"> 
    <action name="ActionC" class="ClassC-SimplyRespondsTheProblem"/> 
</actions> 
相關問題