IIS-8内に展開されたasp.net mvc 5 Webアプリケーションに取り組んでおり、アプリケーション内に、主にサーバーとVMのネットワークをスキャンし、スキャン結果でデータベースを更新する長時間実行タスクを実行するメソッドがあります. メソッドの実行は、本番環境で完了するまでに 30 ~ 40 分かかる場合があります。このメソッドを 1 日に 2 回呼び出す Hangfire という名前のスケジュール ツールを使用しています。
これは、startup.cs ファイル内のジョブ定義で、8:01 am
&でメソッドを呼び出します8:01 pm
:-
public void Configuration(IAppBuilder app)
{
var options = new SqlServerStorageOptions
{
PrepareSchemaIfNecessary = false
};
GlobalConfiguration.Configuration.UseSqlServerStorage("scanservice",options);
RecurringJob.AddOrUpdate(() => ss.Scan(), "01 8,20 ***");
}
スケジュール ツールによって 1 日に 2 回呼び出されるメソッドは次のとおりです。
public void Scan()
{
Service ss = new Service();
ss.NetworkScan().Wait();
}
最後に、実際のスキャンを実行する方法は次のとおりです (私は、その方法が何を行うかについての高レベルの説明のみを提供します):-
public async Task<ScanResult> NetworkScan()
{
// retrieve the server info from the DB
// loop over all servers & then execute some power shell commands to scan the network & retrieve the info for each server one by one...
// after the shell command completed for each server, i will update the related server info inside the DB
現在、私はテスト環境でいくつかのテストを行い、すべてがうまく機能しました.2つのテストサーバーをスキャンするのに約25秒かかりました.しかし、現在、アプリケーションを本番環境に移行する予定で、スキャンするサーバーは約120++あります. そのため、本番環境でメソッドの実行が完了するまでに約 30 ~ 40 分かかると見積もっています。私の質問は、この実行が期限切れにならず、ScanNetwork() メソッドが最後まで完了するようにするにはどうすればよいですか?