生日提醒Asp.Net MVC的代码

Pan*_*ani 4 .net c# asp.net-mvc

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

Ste*_*zek 5

有一个名为Quarz的开源库可以帮助你.

Mike Brind有一篇关于这个图书馆的非常好的博客文章.该库提供了一个流畅的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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

public class BirthdayJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        // Check for birthdays...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

  • Quartz是可行的方法,但最好将其作为Windows服务 (2认同)