我正在设计一个作业分配系统,它将使用ASP.NET MVC框架开发。其中一个要求是在特定时间(可以是作业分配时间后1小时或2小时)检查作业的状态(分配给作业操作员)。如果状态为“已拒绝”,则系统需要向管理员发送电子邮件。
我实际上在控制器中有一个操作方法,它会在数据库中搜索任何被拒绝的作业,如果找到任何一个,则会向管理员发送一封电子邮件。电子邮件实现(使用.Net邮箱库)也在操作方法内完成。
所以我的问题是
1.如何在特定时间从控制器调用该特定的动作方法(可以在过去设置。例如:从现在起2小时触发)。
2.在这种情况下,创建批处理文件并将其分配给任务计划程序或Windows服务是可行的吗?实现能直接检查数据库并每隔x分钟发送一次电子邮件的东西?
答案 0 :(得分:1)
//Check this out for job scheduling
//使用此功能,您可以制作一段时间后会自动触发的自定义作业。
//安装包石英
//创建一个工作类
using System;
using Quartz;
namespace FooBar
{
public class LoggingJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Common.Logging.LogManager.Adapter.GetLogger("LoggingJob").Info(
string.Format("Logging job : {0} {1}, and proceeding to log",
DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString()));
}
}
}
//现在创建您的时间激活作业。易
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Common.Logging;
using Quartz;
using Quartz.Impl;
namespace FooBar
{
class Program
{
private static ILog Log = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
try
{
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start();
IJobDetail job = JobBuilder.Create<LoggingJob>()
.WithIdentity("myJob", "group1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule
(s =>
s.WithIntervalInSeconds(10)
.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(10, 15))
)
.Build();
sched.ScheduleJob(job, trigger);
}
catch (ArgumentException e)
{
Log.Error(e);
}
}
}
}
//使用此参考 https://www.codeproject.com/Articles/860893/Scheduling-With-Quartz-Net