Планировщик Quartz.Net работает локально, но не на удаленном хосте

У меня есть временная работа quartz.net, которая отлично работает на моем компьютере разработчика, но после развертывания на удаленном сервере она не запускается. Я считаю, что задание запланировано нормально, потому что, если я отправляю сообщение, оно говорит мне, что задание уже существует (однако я обычно проверяю ответ). Код электронной почты определенно работает, так как событие button1_click успешно отправляет электронные письма.

Я понимаю, что у меня полное или среднее доверие на удаленном сервере. Мой хозяин говорит, что они не применяют известные им ограничения, которые могут повлиять на это. Любые другие вещи, которые мне нужно сделать, чтобы запустить его?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Quartz;
using Quartz.Impl;
using Quartz.Core;
using Aspose.Network.Mail;
using Aspose.Network;
using Aspose.Network.Mime;
using System.Text;

namespace QuartzTestASP
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ISchedulerFactory schedFact = new StdSchedulerFactory();
                IScheduler sched = schedFact.GetScheduler();
                JobDetail jobDetail = new JobDetail("testJob2", null, typeof(testJob));
                //Trigger trigger = TriggerUtils.MakeMinutelyTrigger(1, 3);
                Trigger trigger = TriggerUtils.MakeSecondlyTrigger(10, 5);
                trigger.StartTimeUtc = DateTime.UtcNow;
                trigger.Name = "TriggertheTest";
                sched.Start();
                sched.ScheduleJob(jobDetail, trigger);
            }
        }
        protected void Button1_Click1(object sender, EventArgs e)
        {
             myutil.sendEmail();
        }
    }

    class testJob : IStatefulJob
    {
        public testJob() { }

        public void Execute(JobExecutionContext context)
        {
            myutil.sendEmail();
        }

    }

    public static class myutil
    {
        public static void sendEmail()
        {
            // tested code lives here and works fine when called from elsewhere
        }
    }
}

1 ответ

Решение

Фабрика планировщика должна быть глобальной для вашего приложения. Другими словами, объявите его в Global.asax или аналогичном, который эффективно дает вам глобальный экземпляр для работы. Вы должны запустить планировщик в запуске вашего приложения, если работает ASP.NET.

Остерегайтесь мыслей. ASP.NET перезапускает свои процессы, что приводит к отключению планировщика (никакие задания не запускаются), пока на веб-сервер не поступит следующий следующий запрос на повторный запуск планировщика. Рекомендуемый способ - использовать службу Windows для запуска заданий Quartz.NET.

Другие вопросы по тегам