生日提醒代码净MVC
本文关键字:MVC 代码 生日 | 更新日期: 2023-09-27 18:03:52
我想在MVC Asp中创建一个web应用程序。酒店客房预订和客户管理网。我在其中一个要求上遇到了麻烦。我想创建一个代码发送短信给客户在他们的生日祝福他们从酒店。我很困惑,那我应该在哪里放置代码来检查客户的出生日期与今天的日期相同,以便代码每天在中午12点触发,即使web应用程序没有启动。你能解释一下我应该在哪里插入代码吗?
有一个叫做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);
它可以在网站,Windows服务甚至winforms应用程序的上下文中运行(只要用户不关闭它)
根据上下文,您需要在不同的位置调度作业。对于一个网站,将是Application_Start()-方法。对于服务,这将是OnStart()-方法。
另外,你需要一个类"BirthdayJob",它将提供应该定期执行的实际代码:
public class BirthdayJob : IJob
{
public void Execute(IJobExecutionContext context)
{
// Check for birthdays...
}
}
如果你在一个网站的上下文中调用这段代码,有一点你应该注意:
如果一段时间没有请求,IIS可能会使您的网站进入睡眠状态。在这种情况下,计划任务可能没有执行。
有一个选项来改变你的网站的超时时间:在IIS管理器中转到"应用程序池",找到用于您的网站的应用程序池,然后选择"属性"->"性能"。在这里可以设置空闲超时。还有其他几种方法可以解决这个问题。
然而,如果你的网站经常被请求,你就不会看到这个问题。
最好的方法是从windows服务中调用Quarz,即使你的网站睡着了或者喝醉了躺在桌子下面也能运行。
你可以将一个服务与你的web应用程序一起发布,它可以进行定期检查,并与站点分开运行。
此服务的另一个用途可能是站点使用的数据存储的一般维护,因此,例如,每天一次,它将存档信息,检查生日和任何其他维护或定期任务,例如发出提醒等,您的平台将发出。