18

IIS 7.5 サーバーでホストされている ASP.NET MVC アプリケーションをウォームアップしたいと考えています。以前はhttp://forums.iis.net/t/1176740.aspxで利用できたウォームアップ モジュールは削除されました。

IIS または ASP.NET ワーカー プロセスがなんらかの理由で再起動するたびに、アプリケーションをウォームアップする必要があります。ウォームアップ期間中、IIS は、ウォームアップ状態またはクライアントにサービスを提供できないことを示す HTTP ステータス コードを返す必要があります。

HttpRequests を介してサイト内の必要なページをナビゲートする実行可能ファイルを作成することは良い考えでしょうか? 実行可能ファイルは、IProcessHostPreloadClient 実装からトリガーできます。IIS を構成して、localhost からの要求のみを受け入れ、実行可能ファイルが完了すると、すべてのクライアントに切り替えることができますが、その切り替えによって IIS の再起動がトリガーされることはありません (明らかに)。

手動で実行可能ファイルを作成する代わりに、Visual Studio 2010 - Web Performance Test を使用してアプリケーションをウォームアップすることはできますか? 他の選択肢はありますか?

PS: アプリケーションはフォーム認証とセッションを使用するため、状態 Cookie とその他の Cookie を維持することが重要です。

更新 1 - アプリケーションで .NET Framework 4.0 と Entity Framework (データベースが最初) を使用しています。EF クエリへの最初のヒットは遅いです。ウォームアップの背後にある理由は、これらの最初のヒットを邪魔にならないようにするためです. ほとんどの場所で既にコンパイル済みクエリを使用しており、EF 用にコンパイル済みのビューを実装しています。モデルとアプリケーションのサイズが非常に大きく複雑です。ウォームアップでは、エンド ユーザーがアプリケーションにアクセスする前に、コンパイル済みおよびコンパイルされていない EF クエリが少なくとも 1 回実行されるように、多くのページを確認する必要があります。

4

3 に答える 3

12

Microsoft は、まさにあなたが求めていることを実行するモジュールをリリースしました。IIS 7.5のアプリケーション初期化モジュールは、最初の要求が到着する前に Web アプリケーションを読み込むことで、Web サイトの応答性を向上させます。

実際のユーザーからの要求を受け入れる前に、IIS がプリロードする一連の URL を指定できます。真のユーザー ログイン エクスペリエンスを実現できるとは思いませんが、ログインを必要としないシミュレートされたページを設定して、求めるのと同じウォームアップを実現できるのではないでしょうか?

私が最も魅力的だと思う機能は、このモジュールがオーバーラップ プロセスのリサイクルも可能にすることです。IIS 8.0の次のチュートリアルには、重複したプロセスのリサイクルを有効にする方法に関する段階的なアプローチが含まれています。

アクティブなワーカー プロセスがリサイクルされていることを IIS が検出すると、IIS は、新しいワーカー プロセスが新しいプロセスですべてのアプリケーション初期化 URL の実行を完了するまで、アクティブなトラフィックを新しいリサイクルされたワーカー プロセスに切り替えません。これにより、Web サイトを閲覧している顧客は、アプリケーションがライブで実行されると、アプリケーションの初期化ページが表示されなくなります。

この IIS アプリケーション初期化モジュールは IIS 8.0 に組み込まれていますが、IIS 7.5 用にダウンロードできます

于 2012-09-20T20:52:53.977 に答える
10

IIS 7.5 および ASP.NET 4.0 に組み込まれている自動開始機能については、次の投稿を参照してください。

于 2011-09-12T12:04:18.850 に答える
6

ホストされたリソースに対するサーバー要求を生成する任意のアプリケーションを使用して、IIS プロセスをウォームアップできます。必要なリクエストの正確な数は、ウォームアップが必要なパーツによって異なります。通常、ウォームアップは次の目的で使用されます。

  • ワーカー プロセスの起動。このためには、アプリケーション全体のプロセスをウォームアップするために 1 つのリソースを要求するだけで済みます。
  • 静的初期化、データベースの起動、または事前キャッシュを実行します。Global.asax ファイルで行うことはすべて、最初の要求を行うときに行われるため、その時点ですべての初期化を行うことができれば、1 ページの要求を行うだけで済みます。
  • ASP.NET ページの事前コンパイルを強制します。これを行うには、すべてのページにアクセスする必要があります。幸いなことに、これは通常、それほど時間コストがかからないため、心配する必要はありません。個々のページの読み込みが遅い場合は、個別にウォームアップできます。

ここでの「ウォームアップ」プロセスは魔法のようなものではありません。IIS に問題の URL を提供させる必要があるだけです。あなたが言及したすべてがそれを処理します: ストレス テスト ツールを使用して URL をクエリし、カスタム ユーティリティを作成して HTTP 要求を投稿し、「wget」などのツールをスクリプト化するか、PowerShell スクリプトを使用して URL をダウンロードするだけでもそれを実行できます。 .

私の知る限り、IIS 内で localhost へのアクセスを制限することに関しては、IIS を再起動する必要がある唯一の変更方法です。アプリケーションにプレリクエストフックをいつでも構築して、そこで状態を維持し、ウォームアッププロセスで特定の URL を照会して、その状態を「オープン」に切り替えることができます。しかし、あなたが何を成し遂げるかはわかりません。なんらかの理由で、ウォームアップが完了する前にユーザーがサイトにクエリを実行しようとすると、サイトが応答するまでに時間がかかり、最終的には要求したページが表示されます。ウォームアップ中にサイトからロックアウトすると、代わりに、サイトがオフラインであると主張するブラウザー ネットワーク エラーが表示され、(私には) もっとひどい状態に思えます。

于 2011-09-12T12:04:53.707 に答える