【问题标题】:ASP .NET - Quartz Scheduler only Executes jobs on user visitASP .NET - Quartz Scheduler 仅在用户访问时执行作业
【发布时间】:2017-05-16 14:12:34
【问题描述】:

我需要从我的 .NET 应用程序自动发送电子邮件。但是,在为将来安排作业时,作业仅在用户访问该站点时才会执行。

Global.asax.cs

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    JobScheduler.Start();
}

作业调度程序 (ScheduledTasks.cs)

public class EmailJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        BDL.Utilities.sendEmailNotification(to, subject, body);
    }
}

public static void start()
{
    foreach (AspNetUser user in users)
    {
        IJobDetail job = JobBuilder.Create<EmailJob>().WithIdentity((jobidentity))
            .UsingJobData("to", user.Email)
            .UsingJobData("subject", subject)
            .UsingJobData("body", bodyholder).Build();

        ITrigger trigger = TriggerBuilder.Create()
            // schedule for 1 day in the future
            .StartAt(expdate.AddDays(1)))
            .WithIdentity(triggerid)
            .Build();

        scheduler.ScheduleJob(job, trigger);
    }
}

我已安排在未来 1 天触发。这个触发器应该会导致我的工作在未来 1 天执行。但是,由于某种原因,只有当用户在计划触发该作业的当天访问我的网站时,该作业才会执行。如何让 Quartz 自动执行这些作业???

编辑:我的目标是在不干扰应用程序池线程的情况下完成此任务。接受的答案表明,这个问题仅仅是用自动化脚本替换用户交互。而副本要求一种方法来维护应用程序池线程,我可能会在 Java 中添加!

【问题讨论】:

  • 看来你的ApplicationPool会被回收。
  • 请注意,在没有池回收的情况下保持 asp.net 运行是个坏主意,您应该寻找其他解决方案,例如 windows 服务

标签: c# asp.net quartz.net quartz


【解决方案1】:

+1 给@BRAHIMKamel。您可以考虑使用Hangfire 在您的 ASP.NET 应用程序中进行一些工作处理。

但请注意,只要您依赖 IIS 应用程序池,您的作业就可以随时终止并重新启动。这意味着您的作业代码必须容忍多次后续执行。关于电子邮件,这意味着您应该在尝试实际发送消息之前检查您是否已经发送了您想要的内容。

【讨论】:

  • 您建议如何检查作业是否已执行?
  • @objectivelyC,我会保存用户上次发送电子邮件的日期并在发送前检查它。关键考虑因素是重复消息是否可以容忍,或者根本不发送它们比将它们加倍更好。如果是前者,则应在电子邮件发送后更新上次发送日期,否则,在此之前。
【解决方案2】:

我能够想出一个更优雅的解决方案。使用 Zapix 工具,我可以安排我的网站每 20 分钟进行一次质量检查。 Zapix 只是访问了该站点并收到了 http 响应。通过使用 Zapix,它模仿了手动访问网站以触发电子邮件的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    相关资源
    最近更新 更多