我有一個ASP.NET Web服務,它可以完成一些繁重的工作,比如說,一些文件操作,或者從一堆水晶報表生成Excel表格。我不想被調用這個Web服務阻塞,所以我想讓Web服務調用異步。另外,我想從一個網頁調用這個Web服務,並希望有一些機制可以讓我繼續輪詢服務器,這樣我就可以在屏幕上顯示一些進度指標,比如說,已經被處理。請注意,我不希望通知完成Web方法調用,而是希望獲得實時進度狀態。我如何去做呢?您如何衡量Web服務調用的進度?
回答
寫沿多遠,你可以通過傳遞已定並返回0-100之間的近似值作業的ID查詢服務器上的一個單獨的方法(或0.0和1.0,或其他)是。
E.g.在REST風格中,您可以向http://yourserver.com/app/jobstatus/4133/
發出GET請求,該請求會返回一個簡單的'52',如text/plain
。那麼你只需要查詢每一秒(秒?兩秒?十秒?),看看它有多遠。
你實際上如何實現在後臺監視巨大取決於你的過程和它是如何工作。
擁有初始「開始生成報告」 Web服務調用創建一些任務池任務,並返回調用者的任務的ID。
然後提供返回給定的TaskID「完成百分比」的另一種方法。
提供用於返回已完成任務的實際結果的第三種方法。
最簡單的方法就是讓Web服務與呼叫進展的數據庫更新字段,然後創建一個查詢,即場和返回值的Web服務。
如果您使用數據庫,建立一個內存表是一個不錯的主意。沒有意義的浪費磁盤I/O瑣碎的任務。 – 2008-09-25 19:37:23
使Web服務返回某種類型的任務ID或會話ID。製作另一種Web方法以使用該ID進行查詢,該方法返回所需的信息(完成百分比,文件列表等等)。從客戶端以一定的時間間隔輪詢此方法。
如果您在Web服務的內存中執行此操作,則使用數據庫來存儲進程信息,但這種情況在Web場環境中無法很好地擴展,因爲可能會發生該任務在另一臺服務器上運行,投票。
編輯:我剛看到另一個類似的答案,並對它發表評論。評論者是正確的 - 你可以使用內存表來避免磁盤操作,但仍然使用單獨的數據庫服務器。
我認爲XML的Web服務是緩慢的,因此創建多種方法和輪詢的進展將是極其緩慢,將在服務器上產生巨大的負荷。我不會在生產環境中這樣做。我看到與數據庫輪詢相同(但較小)的問題。
嘗試代替SOAP擴展。它實現了一個事件驅動模型。見Adding a Progress Bar to Your Web Service Client Application on MSDN。
您也可以use SoapExtensions向您的客戶通知下載/處理進度。服務器然後可以發送事件給客戶端。如果您不使用它,客戶端中的任何內容都不得更改。
允許在你的客戶是這樣的:
//...
private localhost.MyWebServiceService _myWebService = new localhost.MyWebServiceService();
_myWebService.processDelegate += ProgressUpdate;
_myWebService.CallHeavyMethod();
//...
private void ProgressUpdate(object sender, ProgressEventArgs e)
{
double progress = ((double)e.ProcessedSize/(double)e.TotalSize) * 100.00;
//Show Progress...
}
- 1. 進行批量調用Web服務和保存進度
- 2. 衡量Web服務器的性能
- 3. 如何衡量ajax調用的進度?在PHP與jQuery/ajax
- 4. 如何衡量從axios調用加載json文件的進度?
- 5. 衡量服務
- 6. 如何監控您的Web服務?
- 7. 如何測試您的Web服務器速度?
- 8. 如何組織您的服務器以進行Web開發?
- 9. 使用度量的ASP.NET Web服務
- 10. 調用Web服務的Web服務
- 11. 如何跟蹤角度2服務調用的進度
- 12. 在Java中的Web服務調用進度報告
- 13. 如何使用asp.net web服務調用oracle web服務
- 14. 零星的例外調用負載平衡的Web服務
- 15. 如果您提供Web服務調用結果的驗證
- 16. 如何使用我們的私鑰進行Web服務調用?
- 17. Symfony的進度條調用的服務
- 18. 安裝時間Web服務調用的度量標準
- 19. 您使用Go for web服務使用什麼Web服務器?
- 20. 如何調試Web服務?
- 21. 如何調試Web服務
- 22. Web服務進行異步調用
- 23. 跨進程同步Web服務調用
- 24. Web服務使用Oracle WebCache進行負載均衡?
- 25. 如何從服務調用的線程更改活動的進度條進度?
- 26. 如何在角度js中使用web worker來調用服務?
- 27. 如何使用HttpWebRequest調用Web服務
- 28. 如何使用GET調用Web服務?
- 29. 如何使用KSOAP調用Web服務?
- 30. 如何使用Java調用Web服務
而且我們都在想,「爲什麼不Web服務自動做到這一點?」當我們說他們吸吮時,這就是我們的意思。你必須自己構建所有這些東西。 – 2009-01-07 13:49:35