2012-02-09 8 views
1

私はQuartz.netスケジューラを動作させようとしていますが、将来スケジューリングされるジョブがなぜ起動しないのか分かりません。私は1分ごとに起動するcronトリガーでテストしましたが、それは動作します(ジョブとすべて)ので、私はそれが私の仕事のコードで問題ではないことを知っています。私が試してみましたこれらの変数はガベージコレクトされていますか?

もの:

ISchedulerFactory
  • グローバル静的変数が
  • ISchedulerは、グローバル静的変数を作る作る
    1. 私はので、私は知っているのApplication_Startの最後に電子メール通知を追加しましたそれは発射時
    2. 私はスケジューラのコードを変更するたびに、私はアプリを再起動し、私はそれが再起動された知っているので、通知電子メールを起動します。

    私はこのプログラムを共有ホスティング環境で実行しています(それが影響を与えるかどうかはわかりません)。私の推測(そしてこれは唯一の推測です)は何かがガベージコレクトされていることですが、何や理由がわかりません。

    void Application_Start(object sender, EventArgs e) 
    { 
        // Code that runs on application startup 
        // construct a scheduler factory 
        ISchedulerFactory schedFact = new StdSchedulerFactory(); 
    
        // get a scheduler 
        IScheduler sched = schedFact.GetScheduler(); 
        sched.Start(); 
    
        // construct job info 
        JobDetail jobDetail = new JobDetail("myJob", null, typeof(Recorder)); 
        jobDetail.JobDataMap["domain"] = "www.mydomain.com"; 
        jobDetail.JobDataMap["userId"] = "2"; 
    
        // Create trigger (everything is in UTC!!!) 
        CronTrigger cronTrigger = new CronTrigger("Schedule"); 
        cronTrigger.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow); 
        cronTrigger.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); // run in pacific timezone 
        cronTrigger.CronExpressionString = "0 30 13 ? * MON-FRI *"; 
    
        sched.ScheduleJob(jobDetail, cronTrigger); 
    } 
    
  • +0

    この質問とその回答をお読みください:http://stackoverflow.com/questions/1356789/quartz-net-with-asp-net –

    答えて

    2

    何の要求が入ってくるされていない場合、ASP.NETプロセスは、IISによってシャットダウンすることができますので、このコードはどれも解雇されないであろう。

    これは、web-appsがサービスのような(常に実行中の)動作の良いソースではない理由です。

    これは、外部からcURLツールを使用してpingされるページ/ Webサービスを備えたWebアプリケーションで実装されています。

    これ以上デバッグしたい場合は、Application_Endに通知を追加して、タイマーがスケジュールされたジョブを起動する前にプロセスが実際にシャットダウンされていることを確認してください。

    +0

    私が読むほど、私はそれが何であるかと思いますハプニング。アプリケーションプロセスがシャットダウンした場合、新しい要求によってapplication_startメソッドが起動されますか? – chobo

    +0

    はい - IISが非アクティブなためにアプリケーションプールをシャットダウンすることを決定した場合、新しい要求はアプリケーションを再起動して要求を実行します。 IISのAppPool設定で 'Idle-Timeout'(デフォルトは20分)を探します。 20分間要求が行われない場合、IISによってアプリケーションプールがシャットダウンされる可能性があります。必要に応じてこの時間を延長することができます。 – Leon

    +0

    もう1つの選択肢は、IIS(共有ホスティング)を制御できない場合、アプリケーションをアイドル状態に保つために、たまに「curl」を介して「ダム」ページにリクエストを送信することです。 – Leon

    関連する問題