如何在Web应用程序中正确设置计划任务

时间:2011-05-12 12:23:17

标签: c# .net asp.net quartz.net

我有以下问题 我们的客户有一个由多个用户使用的应用程序。现在,他们希望通知超过30天不活动的用户。

我正在使用Spring.Quartz来解决这个问题。但现在这些东西在Windows服务中运行(与网站的数据库通信) 我想知道是否无法在Web应用程序中使用Quartz库 我知道只要应用程序处于活动状态,它就能正常工作,但如果应用程序重复使用该怎么办?或者在一段时间内不活动(前2天)。

编辑:可以定期停用。但通知仍应有效。

还有其他方法吗? 欢迎任何帮助。

干杯

3 个答案:

答案 0 :(得分:1)

在这种情况下,Windows Service方法最好。您还可以创建一个Windows计划,它将调用您的页面(例如http:// [your-site] / [yourapp] /notifyusers.aspx),这将执行必要的操作。或者,如果您希望经常访问该应用程序(因此您确定它不仅仅是回收),请将global.asax的Application_Start放入QueueWorkingItem以启动该线程,该线程将具有如下内容:

private void MyPingThread(object state)
{
    ThreadExitState lstate = state as ThreadExitState;
    EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset);
    while (true)
    {
        if (lstate != null)
        {
           if (!lstate.Active)
               return;
        }
        handle.WaitOne(1000 * 60 * 60 * 4); // Run the task each 4 hours
        //Do your work here
    }
}

答案 1 :(得分:0)

应用程序启动时只需踢一个线程(您可以使用Global.asax)。将它包裹一会儿(真实)和一个try / catch,确保你有一些很好的长睡眠,即使发生错误(即在try / catch块之外),你也很高兴。如果您需要倒下的通知,可能不合适,但它应该适用于您正在做的事情。

答案 2 :(得分:0)

我通常会创建一个新的“类库”项目并将其添加到我的解决方案中 然后我在Task Scheduler中创建一个新任务。

我从不将预定的工作与网站混在一起。如果预定作业没有响应,则可能会减慢甚至崩溃您的网站。