2

基本的に、アイドル状態ではないときにバックグラウンドタスクを実行して「メンテナンス」タスクを実行するWebサイトがあります。アイドル状態の場合、これらのプロセスを実行する必要はありません。

これで、これらのタスクも実行する必要があるセカンダリWebサイト(メインサイトの下の仮想ディレクトリ)ができました。ただし、両方を同時に実行することはできません。そうしないと、問題が発生します。

より正確な解決策は、サイトをマージするか、タスクを別のアプリケーションに分割するか、両方が同時に実行されている場合に互いに競合しないようにタスクを変更することです。何らかの理由で、これらは(現在)オプションではありません。

したがって、基本的にセカンダリWebサイトがアクティブな場合、プライマリWebサイトが起動してこれらのタスクを実行していることを確認するための最良の方法は何でしょうか。

最も簡単な解決策は、セカンダリWebサイトからメインWebサイトへの参照を含めることです。これにより、セカンダリWebサイトにページが読み込まれると、最初のWebサイトがリクエストのサーバーになります。1pxの画像のようなもの。

しかし、これはIISを介してより適切に解決されるでしょうか?それらは同じアプリケーションプールを共有する必要がありますか?どちらのアプリケーションも比較的安定しているので、一方のWebサイトがもう一方のWebサイトをダウンさせる心配はあまりありません。

4

2 に答える 2

0

あなたの質問は少し混乱しています。ある時点で、2 つのサイトが同時にタスクを実行することはできないと言いましたが、次に、セカンダリがアクティブな場合はプライマリもアクティブにするべきだとおっしゃいましたか?

一度に 1 つの場所でのみタスクを実行することが目標であると仮定すると、基本的にロックの問題が発生します。いくつかの解決策は次のとおりです。

  • ロック (物理ファイル、データベース エントリなど) を維持し、他のサイトがロックを保持していない場合にのみタスクを実行します。
  • タスクをサイト A で呼び出し可能にしてから、タスク自体を実行するのではなく、サイト B に呼び出しさせます。その後、サイト A は、既にタスクを実行しているかどうかを追跡できます。
  • あなたが自分でリストしたすべての解決策 (特に、バックグラウンド タスクを Web サイトから完全に分離する) は、上記よりも優れた解決策です。

それが役立つことを願っています。

于 2013-03-05T19:24:52.007 に答える
0

Web サービスで自動化されたタスクを実行することに依存するのは難しいです。アプリケーション プールがリサイクルされると、そのタスクが失われ、プロセスの整合性が失われる可能性があります。アプリケーション プールが収集されたときにプロセスが適切に低下するという保証はありません。

専用タスクの実行は、専用に設定されたシステムによってより適切に処理されます。つまり、この Web サービスをホストするサーバーです。ホスト サービスを Web サービスとして Web に公開するのではなく、ローカル サーバー上で直接実行する方が適していると思います。

ただし、それがオプションでない場合は、述べたようにそれらをマージすることでおそらく利益が得られます。この方法では、アプリケーション プールが子サービスから有効である限り、親サービスを利用できます。同様に、アプリケーション プールを共有することもできます。ここでの問題は前述のとおりで、専用プロセスの整合性が損なわれる可能性があります。

.NET は、専用のバックグラウンド タスクを実行するようには実際には設計されていません。これは、Web サービスをサポートするデスクトップ アプリケーションにより適しています。

于 2013-03-05T19:25:20.150 に答える