2012-06-19 50 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