2

Webアプリケーションがあり、アプリケーションの開始時に開始し、5分ごとにトリガーするトリガーを設定しようとしています。

すべてがGlobal.asax内にあります-それを置くのに適切な場所のようでした:

public class Global : HttpApplication
{
    public static StdSchedulerFactory SchedulerFactory;
    public static IScheduler Scheduler;
    public static ITrigger ImageTrigger;

    protected void Application_Start(object sender, EventArgs e)
    {
        SchedulerFactory = new StdSchedulerFactory();
        Scheduler = SchedulerFactory.GetScheduler();

        Scheduler.Start();

        ImageTrigger = TriggerBuilder.Create()
                                     .WithIdentity("ImageTrigger", "Group1")
                                     .StartNow()
                                     .WithSimpleSchedule(x => x.RepeatForever().WithIntervalInMinutes(5))
                                     .Build();

        var imageJob = JobBuilder.Create<DownloadImages>()
                                     .WithIdentity("DownloadImages" , "Group1")
                                     .Build();
        Scheduler.ScheduleJob(imageJob, ImageTrigger);
    }
...
}

だから私は単純なスケジュールで.WithIntervalInMiniutes()を使用してジョブを呼び出すと仮定しましたか、それともそれが大幅に間違っていますか?

私も試したPS:

        AlertTrigger = TriggerBuilder.Create()
                                     .WithIdentity("AlertTrigger", "Group1")
                                     .StartNow()
                                     .WithCronSchedule("0 0/1 * * * ?")
                                     .Build();

続いてコンピューターに向かって叫びます!

よろしくお願いします。

マット

4

1 に答える 1

0

私はあなたのコードを試しましたが、正しく動作します。
Webサービスは、その性質上、スケジュールされたジョブを実行するための最良のオプションではないと思います。

ASP.NETアプリケーションのライフサイクルを読むことをお勧めします。

Application_Start

ASP.NETアプリケーションの最初のリソース(ページなど)が要求されたときに呼び出されます。Application_Startメソッドは、アプリケーションのライフサイクル中に1回だけ呼び出されます。このメソッドを使用して、データのキャッシュへのロードや静的値の初期化などの起動タスクを実行できます。アプリケーションの起動時には、静的データのみを設定する必要があります。インスタンスデータは、作成されたHttpApplicationクラスの最初のインスタンスでのみ使用できるため、設定しないでください。

IISで実行されているASP.NETワーカープロセスは、一定時間非アクティブになるとシャットダウンされ、リサイクルされます。ただし、この動作は変更できます。

別の興味深い記事はここで読むことができます。

于 2012-09-14T10:05:10.213 に答える