如何在特定时间在控制器中调用Action方法

时间:2017-12-05 09:42:53

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

我正在设计一个作业分配系统,它将使用ASP.NET MVC框架开发。其中一个要求是在特定时间(可以是作业分配时间后1小时或2小时)检查作业的状态(分配给作业操作员)。如果状态为“已拒绝”,则系统需要向管理员发送电子邮件。

我实际上在控制器中有一个操作方法,它会在数据库中搜索任何被拒绝的作业,如果找到任何一个,则会向管理员发送一封电子邮件。电子邮件实现(使用.Net邮箱库)也在操作方法内完成。

所以我的问题是

1.如何在特定时间从控制器调用该特定的动作方法(可以在过去设置。例如:从现在起2小时触发)。

2.在这种情况下,创建批处理文件并将其分配给任务计划程序或Windows服务是可行的吗?实现能直接检查数据库并每隔x分钟发送一次电子邮件的东西?

1 个答案:

答案 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