Hangfireクライアントとして動作するASP.NET MVCアプリケーションがあります-さまざまなジョブをエンキューします。 Hangfireの使用法としてSqlServerJobStorage
を使用しています。
今のところ、Hangfireデータベースへの接続がなく、将来どこかで接続がインスタンス化されるシナリオに取り組んでいます。
目標は、私のASP.NET MVCアプリケーションがこの瞬間まで機能し続けることです。接続の復元後、ジョブのエンキューが開始されます。
したがって、アプリケーションはGlobal.asax
で例外をスローします。
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("EshopServiceHangfire");
さらに、すべてのジョブエンキューも例外をスローします。
BackgroundJob.Enqueue<ISomeClass>(x => x.DoSomethingGreat(JobCancellationToken.Null));
Global.asax
の行をtry/catchブロックに入れたので、スローされません。誰かがジョブをエンキューするときに、JobStorage.Current
を確認します。初期化されていない場合は、同じコードで再度初期化を試みます。
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("EshopServiceHangfire");
誰かがこれを行う方法を知っていますか?ドキュメントにはこれに関する情報はありません。
Hangfire.GlobalConfiguration.JobStorage.IsInitialized
のようなもの?
ジョブエンキューから例外をキャッチすることも1つの方法ですが、特定ではないので、私はそれが好きではありません
InvalidOperationException:JobStorage.Currentプロパティ値が初期化されていません。 Hangfire ClientまたはServer APIを使用する前に設定する必要があります。
この場所まで読んだことのある人にとても感謝しています)
Hangfire.JobStorage.Current
Hangfireストレージ構成をチェックする静的プロパティ自体:
//InvalidOperationException " JobStorage.Current property value has not been initialized"
var storage = JobStorage.Current;
GlobalConfiguration.Configuration.UsePostgreSqlStorage(vaildConnString);
//no exception
storage = JobStorage.Current;
さらに、データベースをクエリして接続をテストできます。
JobStorage.Current.GetConnection().GetRecurringJobs();
例外を考えると、InvalidOperationException
などの代わりにSqlException
をスローするのが正しいと思います。特定のデータベースの詳細から分離されたハングファイアコア。