儘可能接近我所知道的,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,或者這種方式有缺陷嗎?
我不知道這是否會工作。但請嘗試[以下內容](http://maharachchi.blogspot.com/2012/09/now-you-can-send-soapfaults-to-fault.html)博客文章中提及的方法。此功能可從WSO2 ESB 4.5.0起。 –