ASP.NET は、Web アプリケーションを構築するための非常に強力なプラットフォームであり、あらゆる種類の Web アプリケーションの構築に使用できる優れた柔軟性と機能を備えています。
ほとんどの人は、WebForms や WebServices などの高レベルのフレームワークしか知りません。これらは ASP.NET 階層の最上位にあります。
この記事の情報は、Microsoft のさまざまな公開ドキュメントから収集および編集されたものであり、IIS、IIS5、IIS6、および IIS7 の 3 世代の要求処理プロセスを比較することで、ASP.NET の基礎となるメカニズムを理解し、その仕組みを理解することができます。リクエストは Web から処理され、サーバーは ASP.NET ランタイムと通信します。基礎となるメカニズムを理解することで、ASP.net についてより深く理解することができます。
IIS 5 での ASP.net 要求処理プロセスIIS 5.x の注目すべき機能は、Web サーバーと実際の ASP.NET アプリケーションが分離されていることです。 Web サーバーとして、IIS は InetInfo.exe というプロセス上で実行されます。InetInfo.exe はネイティブ エグゼクティブであり、実際の ASP.NET アプリケーションは aspnet_wp というワーカー プロセス上で実行されます。プロセスは初期化されるため、これは管理された環境です。
ISAPI: さまざまなサフィックスを処理できるアプリケーションを指します。 ISAPI は、Internet Server Application Programe Interface、Internet Server Application Programming Interface の略語です。
IIS 5 モードの特徴:1. まず、仮想ディレクトリに基づく各 ASP.NET アプリケーションは、同じホスト上で同時に実行できます。つまり、各アプリケーションは 1 つのアプリケーション ドメイン上で実行されます。同じ ワーカー プロセスでは、アプリケーション間の分離はプロセスではなくアプリケーション ドメインに基づいています。
2. 次に、ASP.NET ISAPI は、aspnet_wp ワーカー プロセスを作成するだけでなく、aspnet_wp のパフォーマンスが特定の設定された下限値に低下したことが検出された場合にプロセスを監視する役割も果たします。プロセスを終了するため。 aspnet_wp が終了すると、後続のリクエストによって ASP.NET ISAPI によって新しい aspnet_wp ワーカー プロセスが再作成されます。
3. 最後に、IIS とアプリケーションは独自のプロセスで実行されるため、それらの間の通信には特定の通信メカニズムを使用する必要があります。基本的に、IIS が配置されている InetInfo プロセスとワーカー プロセス間の通信は、同じマシン上の異なるプロセス間の通信 (ローカル プロセス間通信) であり、パフォーマンスを考慮して、名前付きパイプに基づく通信メカニズムがそれらの間で使用されます。 ASP.NET ISAPI とワーカー プロセス間の通信は、それらの間の一連のパイプを通じて実装されます。また、パフォーマンス上の理由から、ASP.NET ISAPI は非同期方式でリクエストをワーカー プロセスに送信し、レスポンスを取得しますが、ワーカー プロセスは ASP.NET ISAPI からサーバーベースの変数の一部を同期方式で取得します。
IIS6のASP.netリクエスト処理プロセスIIS 5.x は、InetInfo.exe を通じてリクエストを監視し、リクエストをワークプロセスに配布します。つまり、IIS 5 でのリクエストの監視と配布は http.sys が担当します。
注: ユーザー アプリケーションによる重要なオペレーティング システム データへのアクセスや変更を防ぐために、Windows にはユーザー モードとカーネル モードという 2 つのプロセッサ アクセス モードが用意されています。一般に、ユーザー プログラムはユーザー モードで実行され、オペレーティング システム コードはカーネル モードで実行されます。カーネル モードのコードにより、すべてのシステム メモリとすべての CPU 命令へのアクセスが可能になります。
ユーザー モードでは、http.sys は aspx ベースの http 要求を受信し、IIS のメタベースに従って、要求に基づくアプリケーションがどのアプリケーション プールに属しているかを確認します。アプリケーション プールが存在しない場合は、アプリケーション プールを作成します。それ以外の場合、リクエストはアプリケーション プールに対応するキューに直接送信されます。
各アプリケーション プールはワーカー プロセス w3wp.exe に対応しており、これは間違いなくユーザー モードで実行されています。アプリケーション プールとワーカー プロセスのマッピングは、IIS メタベースで維持されます。このようなマッピングに基づいて、WAS (Web 管理サービス) は、アプリケーション プール キューに存在するリクエストを、対応するワーカー プロセスに渡します (そうでない場合は、そのようなプロセスを作成します)。ワーカー プロセスが初期化されると、ASP.NET ISAPI がロードされ、ASP.NET ISAPI によって CLR がロードされます。最終プロセスは IIS 5.x と同じです。AppManagerAppDomainFactory の Create メソッドを使用してアプリケーションのアプリケーション ドメインを作成し、ISAPIRuntime の ProcessRequest を使用して要求を処理し、そのプロセスを ASP.NET Http ランタイム パイプラインに入力します。
IIS 7のASP.netリクエスト処理プロセス