2012-06-04 259 views
3

我有一個我作爲常規SOAP Web服務公開的接口。接口的一種方法是客戶端向服務器發送文件,然後服務器處理該文件並返回結果文件。處理文件可能需要一些時間,所以我認爲使用這種方法的異步調用是一個更好的主意。我考慮了以下流程:異步Web服務SOAP

客戶端調用異步方法並使用附件(MTOM)發送文件。 當服務器接收到文件時,將向客戶端發回一個響應,指出文件已被接收,並且將很快處理。 一旦文件處理完畢,就會將響應發送回客戶端,表明它已被處理,並且結果文件也作爲附件返回到響應中。

是否可以使用SOAP與CXF?

感謝

回答

2

您可以使用方法Asynchronous InvocationModel

回調方法 - 在這種情況下,調用遠程操作,則 調用了一個向回叫 對象的引用(javax.xml.ws.AsyncHandler類型)另一種特殊方法,它的一個參數。 每當響應消息到達客戶端, 回調的異步處理對象的CXF運行時給它 響應消息

更多信息可以從以下過的內容:

Apache CXF

+0

感謝您的回答。從你的回答中,我明白所有這些配置都出現在客戶端。我猜服務器端保持同步。我認爲這個配置應該在服務器端完成,可能使用異步servlet(從3.0開始)。有什麼不同? –

+0

OK。通常情況下,在同步服務的情況下,只有一個線程會被用來完成請求和響應。但是在異步服務的情況下,一個線程將被單獨使用來服務於來自服務器的響應。因此基本上,你需要選擇這樣的框架,支持這個功能.http://stackoverflow.com/questions/2911491/writing-async-service-using-cxf-with-java-first-approach – UVM

+0

根據它是什麼解釋http://today.java.net/pub/a/today/2006/09/19/asynchronous-jax-ws-web-services.html,我的問題是,如果我使用CallBack模型,可能我的服務客戶端用C#寫的?由於配置是在客戶端完成的,因此JAX-WS的C#等價物必須支持此功能。 –

0

是,一旦收到文件,你可能會返回請求ID到客戶端和服務器端開始處理,並做維護處理的各種狀態。客戶端可以以不同的時間間隔返回,如果完成,它將接收處理狀態或輸出。

+0

謝謝,但它看起來像一個輪詢模型,當客戶端必須輪詢服務器以確定處理是否完成。我希望服務器在處理完成時發回響應。 –

1

如果您使用WSDL2Java等工具進行客戶端生成,您甚至可以選擇生成異步客戶端。 它將爲您生成一個回調處理程序,其中包含每個服務操作和服務例外的空方法。然後您可以實施這些方法來設置收到響應時執行的操作。 請記住,當異步調用完成時,會啓動一個新線程。