1

ジョブストアとして1つのSQLServerデータベース、両方ともジョブをスケジュールできる2つのWebアプリケーション、およびジョブを実行するためのQuartz.NETWindowsサービスがあります。

2つのWebアプリケーションでジョブをスケジュールするだけで、Windowsサービスでジョブを実行するだけにします。

ここに問題があります:

2つのWebアプリケーションとWindowsサービスでISchedulerインスタンスを作成すると、それらは同時にジョブを実行し、競合が発生する可能性があります。

2つのWebアプリケーションでISchedulerインスタンスを作成しない場合、WebアプリケーションからWindowsサービスへのジョブをスケジュールするにはどうすればよいですか?

ISchedulerにジョブを実行せずにジョブをスケジュールさせる方法はありますか?(IJobアセンブリをこれら3つのアプリケーションすべてにデプロイできます)

4

2 に答える 2

8

ローカルインスタンスを作成するとジョブも実行されるため、WebサイトでISchedulerインスタンスをインスタンス化することはおそらく望ましくありません。

私はあなたがやろうとしていることに似た何かを実装しました。

まず、サービス構成ファイル(app.config)で、4つのキー、、、、およびを構成していることを確認quartz.scheduler.exporter.typeします。quartz.scheduler.exporter.portquartz.scheduler.exporter.bindNamequartz.scheduler.exporter.channelType

次に、web.configに次の4つのキーが構成されていることを確認します:quartz.scheduler.instanceName、、、、および。quartz.scheduler.instanceIdquartz.scheduler.proxyquartz.scheduler.proxy.address

次に、を作成してStdSchedulerFactory()それを使用してスケジューラーを取得する場合、新しいスケジューラーをインスタンス化するのではなく、既存のスケジューラーに接続します。その後、ローカルスケジューラで実行できることはすべて、リモートスケジューラを介して実行できますが、ジョブを実行するインスタンスは1つだけです。

于 2012-08-15T14:13:10.237 に答える
1

構成ファイルで、キー「quartz.threadPool.type」を「Quartz.Simpl.ZeroSizeThreadPool、Quartz」に設定します。このように作成されたクォーツスケジューラーは、ジョブ/トリガー/カレンダーをスケジュール/変更できますが、ジョブを実行することはできません。

于 2012-08-15T19:41:34.417 に答える