Windows のスケジュールされたタスクによって実行される、実行時間の長い C# コンソール アプリケーションをいくつか開発しました。
これらのアプリケーションは、イントラネット/エクストラネット上のさまざまなサーバー マシンで実行される可能性があります。各アプリケーションは、特定のマシンでのみ利用可能ないくつかのリソースにアクセスする必要がある可能性があるため、それらが 1 つのマシンで実行されることを保証することはできません。
それでも、これらのアプリケーションはすべて共通の WCF サービスを使用してデータベースにアクセスしています。
常に実行中のアプリケーションのインスタンスが 1 つしかないことを確認する必要があります。アプリは異なるエクストラネット コンピューター上にある可能性があるため、コンピューターごとのミューテックスや MSMQ を使用することはできません。
次の解決策について考えました-タイムアウトのあるWCFミューテックスサービス。1 つのアプリが実行されると、それが (おそらく別のマシンで) 既に起動されているかどうかを確認し、(専用スレッドで) 定期的に WCF Mutex サービスに ping を実行してタイムスタンプを更新します (ping が失敗した場合、アプリはすぐに終了します)。タイムスタンプの有効期限が切れた場合、これはアプリケーションがクラッシュしたことを意味するため、再度実行できます。
この「WCFミューテックス」が私の問題に対する最適な解決策であるかどうかを知りたいです。そのような機能を実装したサードパーティのライブラリがすでにいくつかあるのではないでしょうか?