2013-03-20 89 views
1

經過多年的節目,我需要爲第一次做一些事情異步(因爲它需要幾分鐘,網頁超時 - 不想讓用戶等待那麼久呢)。這項行動僅由少數人完成,但可以每天進行幾次(對於他們每個人)。異步處理.NET SQL Server?

從「保存」點擊使用LINQ,我插入一條記錄到SQL Server表中的ASP.NET網頁上。然後觸發一個SSIS包,將該記錄推送到全國各地的其他數據庫。

所以..

  1. 如何我(希望簡單)讓這個異步,使用戶可以與其他的東西得到?

  2. 如果有這樣的建立在.NET一側或SQL一邊?

  3. 有沒有辦法(幾分鐘後),用戶可以知道這個過程已經完成併成功?也許是電子郵件?不知道用戶怎麼知道它完成了。

我讀了這個網站一些關於它的線程,但如果使用Visual Studio 2012多現在不同了/ .NET框架4.5(我們仍然在使用SQL Server 2008 R2),他們從2009年所以不知道。

+0

讀入使用AJAX和可能的Web方法 - 你的情況聽起來非常理想... – sgeddes 2013-03-20 23:37:46

+0

不一定。如果用戶導航離開,則沒有機制可以查看結果或檢查錯誤。 – 2013-03-20 23:38:31

回答

1

它通常是在ASP.Net執行長時間運行的任務是一個壞主意。首先,如果應用程序池在任務完成之前被回收,它將會丟失。

我建議寫請求到數據庫表中,使用一個單獨的Windows服務做了長時間運行的工作。它可以更新,可以在以後的時間進行檢查,看是否該任務完成與否的數據庫表中的狀態欄,如果有錯誤。

0

你可以在SQL端使用服務代理;它是一個消息隊列的SQL Server實現。 好的例子herehere

你要做的是創建一個Service Broker服務並定義一些腳手架(隊列,消息類型等)。 然後創建一個服務「激活」過程,它基本上是一個存儲過程從隊列中消費消息。這個SP會收到一個表格中帶有記錄ID的消息,然後繼續進行下去並做任何需要做的事情,或者在完成後發送郵件等。

因此,從您的後臺代碼,你會打電話這將插入用戶的數據到表中的簡單的存儲過程,併發送消息到隊列與如新記錄的ID,然後立即返回。我想你應該先告訴用戶,這可能需要幾分鐘時間,他們會收到一封電子郵件等。

Service Broker的好處是消息傳遞幾乎得到保證 - 即使SQL Server崩潰該消息被排隊之後,當你把它備份激活SP只會再次揭開序幕,所以這是非常強大的。