在asp.net的Web应用程序中包括调度

问题描述

| 我想在Web应用程序中定期在asp.net中运行调度过程。 简而言之,我的数据库表具有日期和截止日期Hrs。我想从这两者计算预期的dateTime,然后定期对另一个表进行更新(插入1000条记录),并且还希望根据该计算来运行邮件发送过程。 这是预期的计划过程,应定期执行。     

解决方法

        您可以使用Window Service在背景或计划中工作,请参见以下链接: 在Windows服务中使用计时器     ,        Quartz.NET作业计划程序库非常适合此类事情。     ,        这是我所做的:
   public class Email {
        private static System.Threading.Timer threadingTimer;

        public static void StartTimer()
        {
            if (threadingTimer == null)
                threadingTimer = new Timer(new TimerCallback(Callback),HttpContext.Current,20000);
        }

        private static void Callback(object sender)
        {
            if (/* Your condition to send emails */)
                using (var context = new MyEntities())
                {
                        var users = from user in context.Usere
                                     select user;
                        foreach (var user in users)
                        {
                            // Send an email to user
                        }
                }
        }
    }
并且您必须将其添加到Application_Start:
    void Application_Start(object sender,EventArgs e)
    {
         EMail.StartTimer();
    }
    ,        看看Jeff Atwood的这篇旧文章: ASP.NET中的简单后台任务 基本上,他建议您使用缓存过期机制来安排定时任务。问题是:您的Web应用程序需要运行。如果根本没有调用该网站怎么办?好了,由于IIS 7.5使得您可以始终保持Web应用程序运行:自动启动Web应用程序。杰夫在评论中建议他的方法行之有效,直到他们超过了。他的结论是,对于小型站点,这是一种很好的方法。