Как я могу запустить задание по расписанию без службы Windows на сервере?

#c# #asp.net #scheduled-tasks #hangfire #quartz

#c# #asp.net #запланированные задачи #hangfire #кварцевый

Вопрос:

Я отправил письмо, которое работает локально, используя asp.net и кварц. Это работает очень хорошо. но это не сработало, когда я поместил его на сервер. Они сказали, что, поскольку это общий хостинг, они не могут запустить его по соображениям безопасности. Агент Sql также не предоставляется в стандартной комплектации. Я предполагаю, что HangFire не использует службу Windows. Я не смог найти, как это сделать с asp.net веб-формы тоже нет.

Комментарии:

1. Измените хостинг: P Кроме этого, я не вижу причин, по которым планировщик не работает для отправки электронной почты. Quartz.net это просто нити внутри вашего asp.net процесс подачи заявки.

2. Может быть, проблема не в Quartz, а в отправке электронной почты? Как говорит @Isma, это должно сработать.

3. У меня есть веб-сайт 20 на хостинге, который сейчас не меняется :). отправка почты отлично работает в моей локальной сети с quartz.net . Поле backdate в таблице SQL, если срок действия истекает задним числом, отлично отправляет почту. но публикация на сервере не работает.

4. Боже мой .. 🙂 измените версию quartz 2.2.4 на 2.5, которая работает отлично .. 🙂 спасибо @Isma

Ответ №1:

Может быть, кому-то нужен этот код для Asp.net веб-форма.

Код задания по электронной почте

 public class EmailJob : IJob
{

    public void Execute(IJobExecutionContext context)
    {
        sendmail();
    }

   public void sendMail()
    {
       //send mail code
    }

}
 

Код расписания заданий работает 00.00 каждый день. вы можете изменить то, что хотите .. 🙂

 public class JobScheduler
{
    public static void Start()
    {
        IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
        scheduler.Start();

        IJobDetail job = JobBuilder.Create<EmailJob>().Build();


        ITrigger trigger = TriggerBuilder.Create()
            .WithDailyTimeIntervalSchedule
              (s =>
                 s.WithIntervalInHours(24)
                .OnEveryDay()
                .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(00, 00))
                .InTimeZone(TimeZoneInfo.Local)
              )
            .Build();

        scheduler.ScheduleJob(job, trigger);
    }
}
 

Global.asax запускает jobscheduler

 void Application_Start(object sender, EventArgs e)
    {
        JobScheduler.Start();

    }