在asp.net中调度任务的方法(不编写Windows调度程序)

时间:2010-07-14 09:38:08

标签: c# asp.net scheduled-tasks quartz.net

我进入共享主机并且他们不允许我使用Windows调度程序...那么在asp.net中实现预定任务的方式是什么,即(定时邮件)...我刚看到background process作者:杰夫阿特伍德博客......这是可靠的吗?或任何其他方式执行计划任务......

然后我发现了quartz.net但我找不到一个将quartz.net嵌入到asp.net中的简单示例(没有安装Quartz.Net服务器作为独立的Windows服务 )...对quartz.net的任何建议......

6 个答案:

答案 0 :(得分:3)

您可以简单地编写一个执行任务的ASP.Net页面,例如发送邮件。然后使用SetCronJob等在线日程安排服务按计划调用服务器上页面的URL。

这种非常简单的方法的缺点是你依赖外部服务。

答案 1 :(得分:1)

我正在调查Microsoft.Web.Administration assembly Schedule Class以实现同样的目的,但似乎该类只能用于安排IIS工作进程重启,这里是example of creating app pools and setting periodical restart

所以唯一的办法就是安排ASP.NET应用程序重启,然后在Application_Start中执行预定的工作。 但这是丑陋的黑客而不是解决方案,所以最后我最终为我们已经在web服务器上运行的本地备份Windows服务添加了调度功能,所以IMO Quartz.net是最适合你的解决方案。也许你可以说服你的网络提供商安装Quartz.net所有其他解决方案看起来像是一个会给你或多或少的问题的黑客。

答案 2 :(得分:0)

答案 3 :(得分:0)

您可以从this获取想法,并将您的任务放在KeepAlive方法中。希望!它会有所帮助。

答案 4 :(得分:0)

不久前我遇到了同样的问题,如果没有使用第三方服务,就没有什么好办法了。

也就是说,我使用.NET Application Cache对象,到期时间为24小时。

Cache["DailyTask"] = true;

然后在我的基页类中,每次发出页面请求时,我都检查了该变量的存在,如果存在,我运行了该任务。这样做的缺点是,您依赖于对您的应用程序发出的页面请求。

最后,我看到这样做的另一种方法是在缓存到期时设置回调(CacheItemRemovedCallback方法),然后链接该方法以将新项目插入缓存中,该缓存也具有回调,因此循环重复。

答案 5 :(得分:0)

System.Timers.Timer - http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

在global.asax

中启动它