我想在MVC Asp.Net中为酒店客房预订和客户管理创建一个Web应用程序。我遇到了其中一个要求的问题。我想创建一个代码,用于在他们的生日那天向客户发送短信,以便从酒店获取。我很困惑,我应该在哪里放置代码来检查生日与今天相同的客户日期,以便代码每天凌晨12:00触发即使Web应用程序未启动。请问您能解释我应该在哪里插入代码?
答案 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)
您可以将您的网络应用程序与服务一起发送,该网站应用程序会定期检查并与网站分开运行。
此服务的另一种用法可能是网站使用的数据存储的一般维护,因此,例如,每天一次它将存档信息,检查生日和任何其他维护或定期任务,例如发布您的平台将发布的提醒等。