一個簡單而理論的問題,答案可能是一個,但我想聽取一些意見和建議。我需要實現一個Web服務(Java),這將啓動一個耗時的過程,它將解析一些輸入文件並完成dome db人員。如何構建一個耗時的web服務
什麼是最好的方法讓用戶知道整個過程不僅開始,而且結束,解析,更新db ...?因爲我無法掛起用戶等待整個過程完成。
注意:用戶在啓動過程之前已通過身份驗證。
編輯:不僅通過網絡瀏覽器訪問網絡服務,但客戶端可以使用任何客戶端與他們想要的語言構建訪問它,只要他們引用wsdl。
感謝
一個簡單而理論的問題,答案可能是一個,但我想聽取一些意見和建議。我需要實現一個Web服務(Java),這將啓動一個耗時的過程,它將解析一些輸入文件並完成dome db人員。如何構建一個耗時的web服務
什麼是最好的方法讓用戶知道整個過程不僅開始,而且結束,解析,更新db ...?因爲我無法掛起用戶等待整個過程完成。
注意:用戶在啓動過程之前已通過身份驗證。
編輯:不僅通過網絡瀏覽器訪問網絡服務,但客戶端可以使用任何客戶端與他們想要的語言構建訪問它,只要他們引用wsdl。
感謝
對於您的場景,您應該實現異步Web服務。使用異步Web服務,您有兩種選擇。
第一種方法是易於實施和它可以與許多WS庫一起工作。但是,這帶來了服務器不得不浪費帶寬來滿足客戶端輪詢請求的缺點。畢竟,這是投票。和大多數時候,投票是一個壞主意。
後者不會像前者那麼直接實施。而且我不知道每個JAX-WS庫是否都支持它。爲了支持你,我做了一個快速的谷歌搜索,並找到了這個鏈接。
這可能會幫助你一點。
+1提醒回撥。我肯定會推薦一個回調設計,而不是輪詢。當客戶端有能力收聽回調時,這當然是有效的,例如,如果客戶端是一個Web應用程序。如果您正在實現回調,則客戶端應該包含回調詳細信息,例如URL。 – Qwerky 2010-10-15 08:32:30
當他們提交的數據,讓他們調查(異步)與他們的令牌另一種方法我想給用戶一個令牌。
然後,在第一種方法中,我將數據添加到隊列中,並讓服務器上運行的另一個進程檢查該隊列並執行處理。然後更新數據庫中的令牌以通知用戶其作業已完成。
我之前就已經研究過類似的問題,並發現在基於HTTP/Web的系統上發起長時間運行的進程是一個糟糕的主意,因爲底層系統經常會超時調用長期運行的web服務。
+1;你爲什麼談到「誘惑」?這種方法的黑暗面是什麼? – chiccodoro 2010-10-15 07:30:44
@chiccodoro人物形象,但你是對的。這是我做到這一點的唯一方法! – 2010-10-15 07:47:59
上個月我一直在做這件事。 +1 – 2010-10-15 08:14:34
當它完成時發送給他們一封電子郵件 – Thilo 2010-10-15 07:27:00
你提到你不能掛用戶等待,所以我們可以假設你正在使用單獨的線程進行解析,數據庫的東西等?當前Web服務正處於設計階段的時候 – 2010-10-15 07:27:03
。沒有編寫代碼。所以任何建議都是值得歡迎的。我不想要的是讓用戶等待瀏覽器窗口打開,直到Web服務完成。 – Leonardo 2010-10-15 07:30:06