Microsoft Azure Web ロールのスケジューラとして Quartz.net を使用しています。RamDataStore を使用すると、Quartz.net を正常に動作させることができます。ただし、これを 2 つのコンポーネントに分割したいと思います。1 つ目は Web インターフェースを介してジョブのスケジューリングを許可し、2 つ目はワーカー ロールを介してジョブを実行します。この分散処理を行うには、ADOJobStore を使用する必要があります。
RamDataStore ではすべて正常に動作しますが、ADOJobStore に切り替えようとすると機能しなくなります。これにより、自分のプロパティに欠けているものがあると信じるようになります。私は Azure SQL データベースを使用しています。これは SQL Server に似ていますが、問題を引き起こす問題がいくつかあります。
VS2010 で Quartz.net 2.0 (nuGet から) を使用しています。データベースは Azure SQL です。
.GetScheduler() を呼び出すと、次の例外が発生します。
{"JobStore タイプ 'Quartz.Impl.AdoJobStore.JobStoreTX' props を構成できませんでした。"}
詳細とともに:
{"プロパティ 'default.connectionString' を正しいデータ型に解析できませんでした: 書き込み可能なプロパティ 'Default.connectionString' が見つかりません"}
私の接続コード(プログラムで設定されたプロパティを含む):
NameValueCollection properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "SchedulingServer";
properties["quartz.threadPool.type"] = "Quartz.Simpl.ZeroSizeThreadPool, Quartz";
properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
properties["quartz.jobStore.clustered"] = "false";
properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";
properties["quartz.jobStore.dataSource"] = "default";
properties["quartz.jobStore.default.connectionString"] = "Server=tcp:serverName.database.windows.net;Database=scheduler;User ID=scheduler@serverName;Password=***;Trusted_Connection=False;Encrypt=True;";
properties["quartz.jobStore.default.provider"] = "SqlServer-20";
properties["quartz.jobStore.useProperties"] = "true";
ISchedulerFactory sf = new StdSchedulerFactory(properties);
_scheduler = sf.GetScheduler();
ヘルプや提案をいただければ幸いです。