2012-06-19 138 views
3

我想知道當您的web項目啓動時(我正在使用MVC4 RC和C#)是否可以循環一些代碼。例如,你有一個實體工廠。這家工廠每小時創建一把椅子。因此,該項目應該在服務器上運行時執行此操作。無論用戶是否在網站上。這可能嗎?你會如何做到這一點?在項目運行時在MVC項目中重複代碼

+0

也許你想是這樣的:[ElapsedEventHandler(http://msdn.microsoft.com/en-us/library/system.timers.elapsedeventhandler。 ASPX)。 – Schaliasos

回答

2

這可能不是這樣做的正確方法,但您可以創建一個EXE來處理您的任務,並讓它在服務器上運行。

3

是的有一種方法可以做到這一點:將某些東西放入具有特定生命週期的緩存中,並使用OnCacheRemovedCallback進行註冊。在此回調中,執行您想要執行的操作並將新項目插入緩存。您需要在啓動時插入6以啓動鏈。這是由SO完成的(見http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/),所以它工作。它顯然有效,可能被稱爲務實的解決方案。

有些人會認爲這有點「駭人聽聞」,如果不知道你做了什麼或者你爲什麼想這樣做,我會傾向於不這樣做。這絕對不是做這些工作的好藝術。


另一種選擇(user1308743已經提到了這一點):創建一個EXE已經做了你需要什麼,讓它從每小時任務計劃程序調用。


略有不同的選項:寫一個窗口服務,並實現定時器或使用類似Quartz.NET安排你的工作這種方式。也許這個解決方案擁有最多的工作和最多的企業,但它起作用(已經實現了這樣的功能,並且像我需要做的那樣起到一種魅力的作用)。作爲附加值,您可以按照可配置的方式編寫計劃。


上找到SO另一種選擇:Recurring tasks in ASP .NET

+0

有趣,並不太難實施。 – formatc

+0

感謝您的回答,我會盡快嘗試第一個解決方案。對於第二個和第三個我有另一個問題。我不是一個高級開發人員,但是當我使用共享主機時,我懷疑我能夠運行/計劃一個.EXE,或者這可能來自代碼? – Nicholas

+0

我想嘗試第一個解決方案,但正在考慮如何調用我的工廠控制器的創建操作。搜索網絡WebRequest並找到如下內容: WebRequest request = WebRequest.Create(「http://www.contoso.com/default.html」); 我可以調用'Create'URL還是有另一種方法來調用ActionResult? – Nicholas