ASP.NET MVC プロジェクトで、いくつかのタスクをスケジュールに従って実行するために Quartz lib を使用しています。Jobs を Global.asax ファイルの Application_Start メソッドに初期化します。しかし、Application_End メソッドが実行されたため、しばらくすると Quartz が停止しました。
変数は静的として宣言されました:
public static ISchedulerFactory scheduleFactory = new StdSchedulerFactory();
public static IScheduler scheduler = scheduleFactory.GetScheduler();
以下は、Quards のジョブが初期化された方法です。
IJobDetail jobSender = new JobDetailImpl("jobSender", "MailGroup", typeof(JobMailSender));
ITrigger triggerSender = new CronTriggerImpl("triggerSender", "SenderGroup", "jobSender", "MailGroup", "0 0/30 * * * ?");
scheduler.ScheduleJob(jobSender, triggerSender);
scheduler.Start();
私はそれが起こる理由を見つけました。すべてのユーザーのセッションが存在しなくなり、サーバーにアクティブなユーザーのセッションがない場合、メソッド Application_End が実行されます。
15 分ごとにサイトを開く新しい Quartz のジョブを作成しました。その結果、新しいユーザー セッションがサーバー上に作成されます。ただし、Application_End メソッドは時々呼び出されます。
誰かが同様の問題に直面していますか? サーバー上にアクティブなセッションがない場合でも、web.config に Application_End メソッドが実行されない設定が含まれている可能性があります。