2

私はquartz.netとcodeplexタスクスケジューラが管理するラッパープロジェクトを知っています。彼らは私たちの仕様に従ってそれを機能させるためにかなりまともな学習曲線と研究開発段階を持っています。また、それらをパッケージ化し、ランタイムインストーラーで構成することも別の問題です。そのため、商用の.NETタスクスケジューラを使用することにしました。

要件は次のとおりです。

  1. WinxpおよびWin7(x86 + x64)でサポートされている必要があります
  2. トリガーが発生したときにコールバックまたはイベントを提供する必要があります。

疑似コードのサンプル:

Trigger mytrigger = new Trigger(Daily, "8:00am", myCallbackDelegate);
mytrigger.Start();

myCallbackDelegateが指すメソッドが毎日8:00に呼び出されます。

スケジューラーは、サービスとして実行することも、スケジューラーを参照するアプリが起動するたびに実行することもできます。フォームにドロップして設定できる.NETコンポーネントを優先します。

あなたの推薦を提供してください。私はグーグルで検索しましたが、この基本的な機能を実行するものが見つかりません。ありがとう

4

1 に答える 1

2

私は WCF サービスで Quartz.Net を使用しましたが、非常にうまく機能しました。Cron トリガーのおかげで柔軟性が高く、基本的にスケジューリングのシナリオのほとんどを解決できます。トリガーをスケジュールするときは、指定する必要があります。 IJob インターフェイスを実装するクラスの型。私の場合、実行メソッドはシングルトン クラス/メソッドを呼び出して、実行する必要があるジョブを実行します。トリガーをRAM(揮発性)またはデータベースに保存するように構成できます。カスタムストレージを指定できると思いますが、私はそのようにはしていません。

Quartz.NET で発生した唯一の問題は、この質問に記載されています。解決した解決策も投稿しました。より具体的な質問がある場合はお知らせください。

これは、Quartz.NET の構成の基本の一部であり、ほとんどがチュートリアルから続いています。

スケジューラをインスタンス化するには、次のようにします。

ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
_scheduler = schedulerFactory.GetScheduler();
_scheduler.Start()

ジョブをスケジュールするには、次のようにします

JobDetail jobDetail = new JobDetail("UNIQUE NAME", null, typeof(NotepadJob));
SimpleTrigger triggerToReturn = new SimpleTrigger();
triggerToReturn.StartTimeUtc = DateTime.Now.ToUniversalTime();
_scheduler.ScheduleJob(jobDetail,trigger);

ジョブは次のようになります

internal class NotepadJob : IJob
{
    //Open Notepad
}

SQL を使用する場合は、Config ファイルで次のように設定を構成できます。

  <configSections>
      <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <\configSections>


<quartz>
  <add key="quartz.scheduler.instanceName" value="DefaultQuartzJobScheduler" />
  <add key="quartz.scheduler.instanceId" value="AUTO" />
  <add key="quartz.jobstore.clustered" value="true" />
  <add key="quartz.jobstore.clusterCheckinInterval" value="15000" />
  <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
  <add key="quartz.jobStore.useProperties" value="false" />
  <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
  <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
  <add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
  <add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
  <add key="quartz.jobStore.misfireThreshold" value="60000" />
  <add key="quartz.jobStore.dataSource" value="default" />
  <add key="quartz.dataSource.default.connectionString" value="[CONNECTION STRING]" />
  <add key="quartz.dataSource.default.provider" value="SqlServer-20" />
  <add key="quartz.threadPool.threadCount" value="10" />
</quartz>

-よろしく

于 2011-05-12T17:13:48.723 に答える