2015-02-10 62 views
1

我有以下場景:Asp.net C#異步調用Web服務方法

1)用戶通過Asp.net網頁上傳文件。
2)網頁將文件傳遞給FileFlowManagerBLL,該文件檢查文件並將其上傳到數據庫
3)我想調用一個後臺Web服務方法,這個方法在同一個項目中,這樣Web服務從上傳的文件開始執行大量的數字處理工作。在調用Web服務方法後,我想將控件返回給用戶而無需等待它完成,並顯示一條消息,指出文件已成功更新,並且一旦數據處理完成,用戶將收到一封電子郵件。
4)Web服務完成數字處理可以說30-60分鐘或更多,並調用相關代碼發送電子郵件給用戶。

我需要一些實現步驟3的指導,即如何異步調用Web服務方法,以便控件返回給用戶,並且他/她可以在數字處理完成時查看Web應用程序的其他頁面。

+0

這是一個相當流行的問題,但我努力尋找最近的重複。在相關領域的人是過時的。 – 2015-02-10 13:19:06

+0

是的,我試圖找到它,但無法找到最新版本! – learner 2015-02-10 13:23:58

+1

這裏是一篇有用的文章 - http://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html – 2015-02-10 13:31:58

回答

1

一種方法是將WCF服務作爲Windows服務託管。您的初始Web服務(在檢查文件後)可以將其寫入某個目錄。然後在Windows服務中,您可以創建一個FileSystemWatcher來查找該目錄中的新文件,並且如果它發現任何可以調用您的處理方法。

+0

c#ASMX web service已經存在,所以調用它的方法會更容易異步(不知何故)。我相信肯定有辦法。 – learner 2015-02-10 13:26:29

+1

有很多關於如何從.net客戶端頁面異步調用方法的示例,然後等待結果。但是,您的示例稍有不同。您不想等待您的長時間運行過程完成,以便發送網頁響應。您想要檢查文件,啓動長時間運行的進程,然後在長進程完成之前返回到客戶端。我會高度推薦你有一個不同的自託管WCF Windows服務,運行這個漫長的過程,並讓你的Web服務調用該服務。像這樣的東西應該分發。 – 2015-02-10 14:07:54