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

У меня есть запланированное задание кварца.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
        }
    }
}

person Glinkot    schedule 04.05.2010    source источник


Ответы (1)


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

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

person Marko Lahma    schedule 04.05.2010
comment
@MarkoLahma Спасибо, но, насколько я знаю, Quartz.NET используется, чтобы не использовать Win Service. Итак, если мы должны использовать Win Service, есть ли необходимость использовать Quartz.net? Есть ли другое решение на стороне приложения? Если да, не могли бы вы привести пример приложения MVC? - person Jack; 08.11.2015
comment
@Christof вы можете разместить Quartz внутри приложения ASP.NET, но, как уже отмечалось, у него есть свои подводные камни. Вы должны размещать Quartz.NET предпочтительно внутри службы Windows, и вы также можете иметь интерфейс управления с использованием ASP.NET MVC и т. д., который не запускает задания, а просто управляет расписаниями и заданиями. - person Marko Lahma; 08.11.2015
comment
Спасибо за ответ. Я опубликовал приложение на сервере IIS и считаю, что лучшим вариантом для меня будет использование службы Windows. Итак, не могли бы вы пояснить мне, какие изменения я должен внести? У меня есть веб-приложение MVC5, и я не знаю, как еженедельно запускать приложение или задание Quartz? Я знаю настройки планировщика Windows, мне просто нужны другие настройки, которые я должен сделать на стороне приложения, кварца и окна. - person Jack; 09.11.2015