1

我有一个 asp.net 网站,想每天做一次任务。任务是:在用户注册到期前 2 天向用户发送电子邮件。我使用Quartz.NET 1.0 版。我编写了一个示例代码,每秒打开一个窗口。现在我不知道在我的 asp.net 项目中应该在哪里找到这段代码?!它现在在一个简单的页面中。我希望它独立于页面。

    public class DumbJob : IJob
    {
        public DumbJob()
        {
        }

        public void Execute(JobExecutionContext context)
        {
            Console.WriteLine("DumbJob is executing.");
            System.Windows.Forms.MessageBox.Show("NICE");
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // construct a scheduler factory
            ISchedulerFactory schedFact = new StdSchedulerFactory();

            // get a scheduler
            IScheduler sched = schedFact.GetScheduler();
            sched.Start();

            // construct job info
            JobDetail jobDetail = new JobDetail("myJob", null, typeof(DumbJob));

            // fire every hour
            Trigger trigger = TriggerUtils.MakeSecondlyTrigger();//.MakeHourlyTrigger();

            // start on the next even hour
            trigger.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
            trigger.Name = "myTrigger";

            sched.ScheduleJob(jobDetail, trigger);
        }
    }
4

1 回答 1

1

有多种方法可以做到这一点……但当然,为您的情况构建某种控制台应用程序可能会更好。

坦率地说,其中最简单的可能是每天触发并启动 exe 程序(您将使用控制台 dotnet 编写)的 Windows 计划任务,该程序将检查即将到期的用户并在找到时发送电子邮件......如果您不想在各个地方都有用户 + 电子邮件代码(并将所有这些集中在您的 dotnet Web 应用程序中),那么我将在您的 .NET Web 应用程序中创建一个 SOAP/REST 端点,该端点将由瘦客户端调用,这将由那个“windows计划任务”安排

Quartz 在调度和执行更多企业事务(例如作业集群/作业高可用性/作业监控)时会给您更大的灵活性......但这仍然是一个 .NET 控制台应用程序,它将启动一个石英调度程序,创建一个触发器,并永远运行......(可能包装到 Windows“包装”服务中以获得更多控制)

于 2013-08-27T18:51:46.923 回答