2011-10-16 30 views
3

我正面臨一個問題。我必須創建一個asp.net 4.0 web應用程序,它應該在指定的時間間隔後檢查數據庫中的表並遍歷所有記錄。我必須保存一些列值爲「xxxx」的記錄。我創建了一個班,這個班有1分鐘的時間間隔。在tick方法上,它遍歷所有記錄並過濾掉要保存的數據。開始後臺工作Asp.net 4.0應用程序

我在Application_Start()方法Global.asax中創建了此類的實例,但此方法不會觸發。記住這個web應用程序沒有webform,甚至沒有Default.aspx

我不能在Windows服務做到這一點,因爲託管服務提供商不支持Windows服務。

+1

獲取其他託管服務提供商。這不應該在ASP.NET應用程序中完成。 –

+0

似乎滿足我的要求http://www.codeproject.com/KB/aspnet/ASPNETService.aspx – Mohsan

+0

看看[這篇文章由菲爾哈克關於在asp.net中運行後臺任務的疑慮](http:// haacked .com/archive/2011/10/16/the-dangers-of-implementation-recurring-background-tasks-in-asp-net.aspx)和一些建議。 – cecilphillip

回答

1

除非應用程序由訪問者啓動,否則任何標準asp.net站點都不會運行。

如果你想調度功能,您可能需要創建一個Windows服務或寫一個小的應用程序,它可以使用Windows任務調度程序來設置(或cron的,如果你是在Linux上)

1

ASP.NET應用程序不會啓動,直到從它們請求(例如aspx頁面或asmx服務)。

而且一旦它們開始使用,它們只能在該過程死亡之前停留有限的時間。

我知道保持網站無限期存活的唯一方式(儘管您仍然需要手動預先啓動它),但是有一個Cache項目(只是一次性的對象),並在過期時設置一個頁面調用,然後添加一個新的緩存項目,從而啓動該過程。

這會使您的應用程序保持活躍狀態​​,以便您可以觸發您的預定事件。

當然也有問題,用這種方法 - 如果發生異常,殺死進程,或者重新啓動服務器,然後在「計時器」不會再次直到頁手動請求啓動。

2

在IIS 7.5中有一個application warmup module,你可能會使用你的應用程序被自動訪問,即使沒有用戶打開的URL。

另一種方法是使用一個免費的保活檢查服務類似Pingdom的或tagbeep

這麼說,我平時總是做一個控制檯應用程序,我包括在Windows的計劃任務,並讓它運行飄飛(例如每小時)這樣的後臺任務。