問題タブ [hangfire]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1552 参照

asp.net - asp.net mvc-5 Web アプリケーションを iis 7.5 にデプロイすると、hangfire が実行されない

私はasp.net mvc-5 Webアプリケーションに取り組んでいます。nuget ツールを使用して、Web アプリケーション内に hangfire ツールをインストールします。

次に、次のようstartup.csに毎分メソッドを呼び出すために、次のクラスを作成します。

呼び出されるメソッドの定義は次のとおりです:-

しかし、現在、IIS 7.5 にアプリケーションを展開していますが、メソッドはまったく呼び出されていません。誰でもこれについてアドバイスできますか?

ありがとう

0 投票する
1 に答える
857 参照

hangfire - TaskCanceledException により、Hangfire ジョブが無期限に Processing 状態になる

私が理解しているように、Hangfire はまだ非同期メソッドをサポートしていません。回避策として、非同期メソッド呼び出しをAsyncContext.Run()from AsyncExでラップして、Hangfire の観点から同期しているように見せました。例外は、期待どおりに正しくバブルアップされているようです (からラップ解除されAggregateExceptionます)。

ただし、 がTaskAsyncスローされた場合TaskCanceledException、Hangfire はそれを「失敗」として正しくマークしません。代わりに、ジョブを再度処理しようとします。TaskAsyncを投げ続けると、TaskCanceledException通常のように 10 回でリトライを停止するのではなく、無期限にその状態でスタックします。

これは Hangfire がOperationCanceledExceptionジョブ由来の例外として扱うのではなく、独自の制御フローとして扱っているためと思われます。例ここここ

すべての Hangfire ジョブを でラップする以外に、それを回避する方法はありますcatch TaskCanceledExceptionか?

0 投票する
1 に答える
1201 参照

c# - hangfire で実行中のメソッド内の log4net でスレッド化エラーが発生する

ハングファイア、繰り返しタスクでプロセスを実行しています。これらのタスクは毎分開始され、DB から数千行を処理するように設定されています。

これらのメソッド内にlog4netロギングを追加するまで、テスト環境でそれらをスムーズに実行しました。現在、log4net はスレッド化エラーをスローします。

これを修正する方法が正確にわかりませんか?

バックグラウンド スレッドの場合、IsBackground=true を設定してワーカーを破棄できることを読みましたが、それはハングファイア サブシステムで管理するように思えます。

log4netから修正するか、メソッドを別の方法で記述することにもっと関心があります。これはテスト プロジェクトですが、実際の環境では log4net を直接呼び出すのではなく、LoggingService にラップされます。このテストでは、単純にしようとしています。仕方がない限り。

0 投票する
1 に答える
542 参照

asp.net-mvc - MVC Hangfire 認証 Ninject

Hangfire AuthorizationFilter にカスタム サービスを注入し、サービスが常に null であるという問題に直面して何かをしたいと考えています。

Owin スタートアップ クラス:

カスタム フィルター:

Ninject カーネル:

エラーが表示されません。助けていただけますか?

0 投票する
1 に答える
1606 参照

asp.net - 長時間実行されるメソッドの実行中にタイムアウトを回避する方法

IIS-8内に展開されたasp.net mvc 5 Webアプリケーションに取り組んでおり、アプリケーション内に、主にサーバーとVMのネットワークをスキャンし、スキャン結果でデータベースを更新する長時間実行タスクを実行するメソッドがあります. メソッドの実行は、本番環境で完了するまでに 30 ~ 40 分かかる場合があります。このメソッドを 1 日に 2 回呼び出す Hangfire という名前のスケジュール ツールを使用しています。

これは、startup.cs ファイル内のジョブ定義で、8:01 am&でメソッドを呼び出します8:01 pm:-

スケジュール ツールによって 1 日に 2 回呼び出されるメソッドは次のとおりです。

最後に、実際のスキャンを実行する方法は次のとおりです (私は、その方法が何を行うかについての高レベルの説明のみを提供します):-

現在、私はテスト環境でいくつかのテストを行い、すべてがうまく機能しました.2つのテストサーバーをスキャンするのに約25秒かかりました.しかし、現在、アプリケーションを本番環境に移行する予定で、スキャンするサーバーは約120++あります. そのため、本番環境でメソッドの実行が完了するまでに約 30 ~ 40 分かかると見積もっています。私の質問は、この実行が期限切れにならず、ScanNetwork() メソッドが最後まで完了するようにするにはどうすればよいですか?

0 投票する
1 に答える
2151 参照

c# - 式を作成する必要があります文字列から

Hangfire はバックグラウンド クラス メソッド ランナーであり、繰り返しジョブ関数です。 RecurringJob.AddOrUpdate(Expression< Action >,string) は、メソッドをキューに追加するために使用されるメソッドです。最初のパラメータはアクション コールで、2 番目のパラメータは cron 形式の文字列です。

クラス名と関数名の文字列がある場合、どうすればジョブを追加できますか?

通常の非文字列呼び出しの例は次のとおりです。

次のようなことをしたい

しかし、これは AddOrUpdate メソッド呼び出しでエラーをスローしています:

System.Linq.Expressions.Expression 型のインスタンスを作成できませんでした。型はインターフェイスまたは抽象クラスであり、インスタンス化できません。パス「タイプ」、行 1、位置 8。

文字列定義を介してジョブを追加するにはどうすればよいですか、または上のサンプルに示されているオブジェクトのインスタンス化とメソッド running(new MyClass().Run()) を可能にする文字列から Expression < Action > を作成するにはどうすればよいでしょうか?

0 投票する
4 に答える
16849 参照

asp.net - Hangfire の定期的なジョブが 30 分間連続して実行された後に再起動しないようにする方法

私は asp.net mvc-5 Web アプリケーションに取り組んでおり、Hangfire ツールを使用して実行時間の長いバックグラウンド ジョブを実行する際に問題に直面しています。問題は、ジョブの実行が 30 分を超えると、hangfire が自動的に別のジョブを開始するため、2 つの同様のジョブが同時に実行されることになります。

今、私は次のものを持っています:-

  1. Asp.net mvc-5
  2. IIS-8
  3. ハングファイア 1.4.6
  4. Windows サーバー 2012

これで、ハングファイアの繰り返しジョブを毎日 17:00 に実行するように定義しました。バックグラウンド ジョブは主にネットワークをスキャンしてサーバーと VM を探し、DB を更新します。定期的なジョブは実行完了後にメールを送信します。定期的なジョブは、実行が 30 分未満の場合にうまく機能していました。しかし、現在、システムが拡大するにつれて、定期的なジョブは以前の 22 ~ 25 分ではなく、40 分後に完了しました。そして、1通ではなく2通のメールを受け取りました(メール間の時間は約30分でした). ここで、ジョブを手動で再実行しましたが、問題は次のとおりであることに気付きました:-

「繰り返しジョブの連続実行が 30 分に達すると、繰り返しジョブの新しいインスタンスが開始されるため、同時に 1 つではなく 2 つのインスタンスが実行されるため、なぜ 2 つのメールを受信したのでしょうか。」

定期的なジョブの所要時間が 30 分未満 (たとえば 29 分) の場合、問題は発生しませんが、定期的なジョブの実行が 30 分を超えると、何らかの理由でハングファイアが発生し、新しいジョブが開始されます。ジョブの実行中に hangfire ダッシュボードにアクセスすると、アクティブなジョブが 1 つしかないことがわかりますが、DB を監視すると、DB にアクセスしている 2 つのジョブがあることが SQL プロファイラーからわかります。これは、繰り返しジョブの開始から 30 分後 (私たちの場合は 17:30) に発生し、2 つのメールを受信した理由は、1 つではなく 2 つの繰り返しジョブがバックグラウンドで実行されていることを意味します。

現在の定期的なジョブの実行が 30 分を超えた場合に、hangfire が新しい定期的なジョブを自動的に開始しないようにするにはどうすればよいですか? ありがとう