2012-10-11 40 views
2

儘可能接近我所知道的,WSO2 ESB無法正確處理進行代理服務操作不返回的響應消息。wso2esb - 問題與代理單向操作

這裏的情景:

我們已經有了一個代碼優先,Axis2中生成的Web服務WSO2坐在應用服務器4.1.0上。

該服務是基於Java的類有類似的一些方法:

public void updateMyObject(MyObject obj) throws MyServiceException 

Axis2的生成不包含一個響應消息WSDL,所以這是基本上單向的。

注:爲Axis2生成的客戶端存根針對此操作運行工作正常。在客戶端代碼中調用存根時,客戶端會阻塞,直到服務器成功處理該操作。如果在服務器上發生錯誤,則引發自定義錯誤,並在客戶端引發異常。

但是,我們希望通過ESB調用此。設置一個簡單的基本代理服務器將不起作用。當通過ESB調用服務,客戶端代碼塊無限期即使遠程服務成功調用。

我讀的地方,這可以通過添加以下到我的inSequence中是固定的:

<property action="set" name="OUT_ONLY" value="true"/> 
<property action="set" name="FORCE_SC_ACCEPTED" scope="axis2" value="true"/> 

該做的伎倆在遠程服務成功處理響應的情況。客戶端代碼不再阻止。

但是,如果有錯誤處理請求,客戶端不知道。 ESB基本上「吃」了錯誤。

這是毫無疑問的,因爲有是因爲OUT_ONLY設置的登記操作無回調處理程序。搜索OUT_ONLY在下面的鏈接瞭解更多信息:

http://techfeast-hiranya.blogspot.ca/2009/12/wso2-esb-tips-tricks-03-transport.html

的FORCE_SC_ACCEPTED設置似乎是,避免了客戶端阻塞的成功條件的東西,大概是因爲它強制一個202 HTTP響應客戶端因此停止等待響應。

由於客戶端針對成功和錯誤條件的服務進行操作,但我無法配置產生相同行爲的代理服務,在我看來,ESB缺少這種方式,這是錯誤。

當然,如果有一種方法,我可以配置它,以免它我想要的,那麼我很樂意聽到它。

但儘可能接近我可以告訴大家,我覺得沒有註冊回調是錯誤的事情,在這裏做,即使沒有響應。我不想在這裏實施一場大火併忘記。執行仍應該從客戶端同步發生。我的客戶期待HTTP 200響應,但沒有成功的機構。

通過檢查WSDL,ESB應該認識到,服務沒有響應消息,但仍然註冊一個回調。當成功接收到200 OK,就應該傳播這一回客戶端和註銷回調。當發生故障時,它也應該將其中繼給客戶端。

那麼,有沒有一種方法可以完成我想要的ESB,或者這種方式有缺陷嗎?

+0

我不知道這是否會工作。但請嘗試[以下內容](http://maharachchi.blogspot.com/2012/09/now-you-can-send-soapfaults-to-fault.html)博客文章中提及的方法。此功能可從WSO2 ESB 4.5.0起。 –

回答

0
However, if there is an error processing the request, the client doesn't know. The ESB basically "eats" the error 

如果你在這種情況下爲你的代理定義了一個錯誤序列,你的客戶端會發生什麼?

如果我們註冊一個回調來回回的outonly操作,會發生什麼是ESB將永遠等待響應,將用完的線程..

在單向消息;

如果是成功的使用這兩個屬性;

<property action="set" name="OUT_ONLY" value="true"/> 
<property action="set" name="FORCE_SC_ACCEPTED" scope="axis2" value="true"/> 

對於在故障序列中處理故障的情況。我想知道,在故障情況下會發生什麼情況。