生日提醒Asp.Net MVC的代码

时间:2015-07-22 08:14:03

标签: c# .net asp.net-mvc

我想在MVC Asp.Net中为酒店客房预订和客户管理创建一个Web应用程序。我遇到了其中一个要求的问题。我想创建一个代码,用于在他们的生日那天向客户发送短信,以便从酒店获取。我很困惑,我应该在哪里放置代码来检查生日与今天相同的客户日期,以便代码每天凌晨12:00触发即使Web应用程序未启动。请问您能解释我应该在哪里插入代码?

2 个答案:

答案 0 :(得分:5)

有一个名为Quarz的开源库可以帮助您。

Mike Brind对这个图书馆有一个很好的blog article。该库提供了一个流畅的API,使您可以完全按照自己的意愿进行操作。

以下代码(基于上述博客文章的示例)创建了一个每天12点调用的事件:

 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
 scheduler.Start();

 IJobDetail job = JobBuilder.Create<BirthdayJob>().Build();

 ITrigger trigger = TriggerBuilder.Create()
    .WithDailyTimeIntervalSchedule
       (s =>
        s.WithIntervalInHours(24)
        .OnEveryDay()
        .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(12, 0))
        )
 .Build();

 scheduler.ScheduleJob(job, trigger);

它可以在网站,Windows服务甚至是WinForms-Application的上下文中运行(只要用户不关闭它)。

根据您需要在不同位置安排作业的上下文。对于网站,将是 Application_Start() -Method。对于服务,这将是 OnStart() -Method。

此外,您需要一个“BirthdayJob”类,它将提供应定期执行的实际代码:

public class BirthdayJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        // Check for birthdays...
    }
}

如果您在网站的上下文中调用此代码,您应该注意一点:

如果一段时间没有请求,IIS可能会使您的网站处于休眠状态。在这种情况下,可能不执行计划的任务。

可以选择更改网站的超时时间: 在IIS管理器中,转到“应用程序池”,找到用于您网站的应用程序池,然后选择“属性” - &gt; “性能”。在那里你可以设置空闲超时。还有其他几种方法可以解决这个问题。

但是,如果经常请求您的网站,您将永远不会看到此问题。

最好的方法是从Windows服务中调用Quarz,即使您的网站在桌子下睡觉或放下,也可以运行。

答案 1 :(得分:2)

您可以将您的网络应用程序与服务一起发送,该网站应用程序会定期检查并与网站分开运行。

此服务的另一种用法可能是网站使用的数据存储的一般维护,因此,例如,每天一次它将存档信息,检查生日和任何其他维护或定期任务,例如发布您的平台将发布的提醒等。