IISアーキテクチャの基本、またはASP.NETのクエリプロビジョニング







昨年、私はASP.NETに平均的な資格を持つWebプログラマーの役職に就くために、10〜15人ほどの候補者にインタビューしました。 「バックフィルする」または「アスタリスクを使用する」という質問として、サーバーの80番目のポートに到着してからaspxページコードに制御が移るまで、HTTP要求で何が起こるかを尋ねました。 統計は意気消沈していた:候補者の誰も理解できる何かを与えることができなかった。 これには独自の説明があります。MSDNのtechnetでも、専門のリソースiis.netでも、a-laの書籍「ASP.NET for professionals」でも、ブログでも、このトピックは十分な注意を払っています。情報はほとんど収集する必要があります少しずつ。 IISの動作を理解しないように、独自のWebサーバー(Igor、George、こんにちは!)を作成することを決めた人々も知っています。 唯一の賢明な記事は、レーガンテンプリンによる「 IISアーキテクチャの紹介 」です。 しかし、彼女はasnetの利益の周辺にも留まっています。



私は純粋に技術的な問題にはあまり興味がありませんが、蓄積された経験をまとめ、Webで興味深い詳細を掘り下げ、この神聖な知識を時代遅れになる前に大衆に伝えることにしました。 この記事はIIS 7.xに焦点を合わせていることをすぐに言っておく必要があります。6区についての分岐がある場合もあります。 作業中に8番目のバージョンに出くわしなかったので、この記事でそれを回避することにしました。 しかし、読者は以下に示す資料を習得して、8つを簡単に理解できると確信しています。



1.一般計画

2.クローズアップ

2.1。 HTTP.SYS

2.2。 World Wide Web発行サービス(W3SVC)

2.3。 Windowsプロセスアクティブ化サービス(WAS)

2.4。 アプリケーションプール

2.5。 アプリケーションドメイン、アプリケーション

3.次は?

ソース



1.一般計画



それでは、最後から始めて、個々の側面をもう少し詳しく考えてみましょう。

英語の文献では、IISのリクエスト処理パイプラインは「リクエスト処理パイプライン」と呼ばれます-「リクエスト処理パイプライン」のようなものです。 一般的に、httpリクエストの場合、次の図に示されています。





1. HTTP要求処理パイプライン(IIS 7.x)。



したがって、http要求は、以下を介してパイプラインのアセンブリラインを通過します。



1.ブラウザーは特定のURLでWebサーバーにアクセスし、サーバー側では、リクエストがHTTP.SYSドライバーをインターセプトします。

2. HTTP.SYSは 、構成リポジトリから情報を取得するためにWASをノックしています。

3. WASは、ストレージから構成を要求します— IISフォルダー内のファイル(applicationHost.config)から。

4.この要求はHTTPプロトコルを介して受信されたため、 W3SVCサービスは構成情報(図ではWWWサービスでもあります)を受信します。この情報には、アプリケーションプールおよびその他のサイトパラメーターに関するデータが含まれます。

5. W3SVCサービスはこの情報を使用してHTTP.SYSを構成します。

6. WASサービスは、 まだ開始されていない場合、アプリケーションプールのW3WP.exeプロセスを開始します。

7. W3WP.exeプロセスでは、 Webサイトアプリケーションが実行されており、実際にはHTTP.SYSドライバーへの応答を生成して返します。

8. HTTP.SYSは、ブラウザーに応答を送信します。



原則として、このスキームはすでにほとんどの企業でインタビューを行い、IISアーキテクチャの一般的なアイデアを得るのに十分です。 しかし、ここに来ていない場合は、さらにフォローしてください。



2.クローズアップ



次に、上記の各コンポーネントについて詳しく説明します。



2.1。 HTTP.SYS


トランスポートレベルでは、IISはプロトコルリスナを使用します。プロトコルリスナは、TCP / IPスタックの最上部にあります。 私たちにとって最も興味深いコンポーネントは、OSのカーネルに組み込まれ、HTTPおよびHTTPSプロトコルで動作するシステムドライバーHTTP.sysです。IISのサイトへのリクエストを受信するすべてのポートでリッスンするように個別に登録します。



HTTP.sysビルトインカーネルは、IIS 6のイノベーションとなり、IIS以前のバージョンのユーザーレベルでHTTPおよびHTTPSリクエストをインターセプトするコンポーネントであるWindows Socket APIを置き換えました。 おそらく、ドライバーのカーネルへの統合が、IISバージョンがWindowsバージョンに緊密にバインドされているまさにその理由です。



ドライバーはすべての着信要求を受け入れ、目的のアプリケーションプールにリダイレクトします。 何らかの理由で、必要なプールがホストされているワークフローが停止(障害、アイドルタイムアウト、構成変更など)またはまだ開始されている場合、HTTP.sysは各プールに特別に割り当てられたキューに着信要求を保存します。 したがって、ユーザー要求はどこにも消えず、通常、IISを実行しているサイトの作業の中断に気付きません。



また、HTTP.sysは応答(より詳細には、 HTTP.sysがコンテンツをキャッシュしないインスタンス )をキャッシュできるため、一部のリクエストはアプリケーションレベルに渡されずに処理され、リクエストURIを解析してRFC 2396(一部-これはここから収集できます-IIS URLでの「%」、「。」、「:」などの特殊文字の使用および要求/応答のログ。



一部のHTTP.sys設定は、Windowsレジストリで行われます(詳細は、 WindowsのHttp.sysレジストリ設定 )。 ところで、同じ場所で-レジストリで-あなたは私たちの市民の登録の通常の場所を見ることができます:%SystemRoot%\ system32 \ drivers \ http.sys。

率直に言って、この記事を書く過程で、私は自分自身のためにいくつかの詳細を発見しました。 たとえば、HTTP.sysドライバーのレベルで応答をキャッシュします。 これは、IISの動作に見られる奇妙な現象の1つを説明するのに役立ちました。 マーケティング担当者は、次の休暇前にswfカードをサイトに投稿しましたが、ファイル名に何かが気に入らなかったため、名前を変更しました。 ただし、サイトは引き続き古いURLでハガキを発行し、ブラウザのキャッシュをクリアしても解決しませんでした。 すでにここに接続していますが、Webサイトとアプリケーションプール全体を再起動したり、企業のプロキシサーバーをバイパスしてサイトにアクセスしたりしても、期待どおりの結果は得られませんでした。 しかし今、私たちは誰が責任を負うかを知っています。




2.2。 World Wide Web発行サービス(W3SVC)


このサービス(WWWサービス仕様と略される)は、HTTP / HTTPSプロトコルを操作し、アプリケーションワークフローを管理するための個別のコンポーネントとしてIIS 6で導入され、次の機能を実行しました。



このサービスは、Svchost.exeプロセスのコンテキストでWindows Server 2003で動作します(設定は、 HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W3Svcレジストリで表示できます。Inetinfo.exeプロセスのコンテキストで実行される他のすべてのIISサービスとは異なり、Iisw3admで実装されます.dll。



IIS 7.xでは、アーキテクチャをユニバーサル化するために、プロセス制御機能が別のサービス-WAS(2.3節を参照)に移動されました。 これで、WWWサービスは本質的にHTTP / HTTPSプロトコルに特化したアダプターの1つになりました-HTTP.sysドライバーの上で動作します。 ただし、WWWサービスはIISの基本的なコンポーネントであるため、その構成は他のプロトコルへのアダプターの構成とは異なります(ここではもう少し似ています)。 WASと同じワークフローで機能し、同じライブラリに実装されます(図2)。





図2。 W3SVCとWASを使用したワークフロー。



プロトコルリスナー(プロトコルリスナーアダプター)のアダプターについて説明しているので、少し時間をおいて、それらが何であるかを見てみましょう。 原則として、IIS 7.xは、標準のHTTPおよびFTP以外のプロトコル(POP3、SMTP、Gopherなど)を使用して要求を処理するように構成できます。 あなたの時間にごめんなさいないなら、あなたはあなたのウェブまたはWCFサービスのためにあなた自身のプロトコルを思いつき、それに必要なすべてのコンポーネントを実装することさえ自由です。 ほとんどの場合、最も一般的なプロトコル用のアダプターとリスナーは無料で商用ダウンロードできます-私はこれをテストしていません。 しかし、まず第一に、.NET Frameworkで提供され、IISと統合されている標準サービス(図3)に注意を払う必要があります。







3. Windowsサービススナップインの標準の非HTTPアダプターのリスト。



それでも、私たちにとって最も重要なアダプターはWWWサービスです。 IIS 6の残りの2つの機能についてもう少し詳しく見てみましょう。



HTTP(S)の管理と構成。 Webサイトの構成の更新時に、WASサービスはこの情報をWWWサービスに転送し、特定のポートでリッスンするようにHTTP.sysを構成し、要求されたサイトのIPとヘッダー、および場合によっては他のドライバーパラメーターを解析します。 逆に、W3SVCは、新しい要求がHTTP.sysの要求キューに到着したときにWASを参照し、この要求を処理するワークフローを取得します。



パフォーマンスメトリックを追跡します。 WWWサービスは、この目的のためにHTTP.sysドライバーを使用してパフォーマンスカウンターを維持し、それらのメトリックをWebサイトとIISキャッシュに提供します。 この問題に関する詳細な情報は見つかりませんでした。



2.3。 Windowsプロセスアクティブ化サービス(WAS)


そのため、IIS 6と同様に、IIS 7.xのWWWサービスは、HTTP.sysの管理とWebサイトのパフォーマンスメトリックの管理のタスクを引き続き実行します。 しかし、ワークフローを管理するタスクは別のサービス-WASに移動しました。 システムによって1つのコピーで起動され、 %SystemRoot%\ System32 \ inetsrv \ Config \ ApplicationHost.configファイルから構成を読み取り、指定された情報に従って対応するアダプターを介してプロトコルリスナーを構成します。 HTTP / HTTPSプロトコルの場合、アダプターはW3SVCサービスであり、リスナーはHTTP.sysドライバーであることを思い出してください。 リスナーは、アダプターを介して要求をインターセプトすると、WASサービスを呼び出してアプリケーションワークフローを取得します。アプリケーションワークフローは、クライアントへの応答を処理および生成するために送信されます。



ユーザー要求の処理に必要なアプリケーションをアクティブ化する場合、次のコンポーネントが関係します。



次の図は、アプリケーションワークフローインスタンス内のコンポーネント図の例を示しています。 WASサービスはワークフローを開始すると、アプリケーション構成に従って必要なプロセスプロトコルハンドラー(PPH)をロードし、アプリケーションマネージャーを介して、アプリケーションがホストされるワークフロー内にアプリケーションドメインを作成します。 アプリケーションマネージャーは、アプリケーションコードをアプリケーションドメインと必要なアプリケーションレベルプロトコルハンドラー(ADPH)にダウンロードして、適切なネットワークプロトコルを使用してメッセージを処理します。





4.外部コンポーネントと対話するためのコンポーネントw3wp.exe。



上記のように、.NET Frameworkには、HTTP / HTTPSプロトコル(お気に入りのASP.NET)、net.tcp、net.pipe、およびMSMQのコンポーネントの実装が含まれています。 それにもかかわらず、HTTP / HTTPSおよびFTPプロトコルスタックはIISおよびOSにより密接に統合されているため、新しいプロトコルの設定は、あまり人気のないDonnetプロトコルを使用して最もよく実証されます。 そのため、フレームワークをインストールした後、IIS ApplicationHost.config構成ファイルに次のエントリが表示されます。

<system.applicationHost> <listenerAdapters> <add name="http" /> <add name="net.tcp" identity="S-1-5-80-3579033775-2824656752-1522793541-1960352512-462907086" /> <add name="net.pipe" identity="S-1-5-80-2943419899-937267781-4189664001-1229628381-3982115073" /> <add name="net.msmq" identity="S-1-5-80-89244771-1762554971-1007993102-348796144-2203111529" /> <add name="msmq.formatname" identity="S-1-5-80-89244771-1762554971-1007993102-348796144-2203111529" /> </listenerAdapters> </system.applicationHost>
      
      





また、対応するPPHおよびADPHコンポーネントはdonnet machine.configで構成されます。

 <system.web> <protocols> <add name="net.tcp" processHandlerType="System.ServiceModel.WasHosting.TcpProcessProtocolHandler" appDomainHandlerType="System.ServiceModel.WasHosting.TcpAppDomainProtocolHandler" validate="false" /> <add name="net.pipe" processHandlerType="System.ServiceModel.WasHosting.NamedPipeProcessProtocolHandler" appDomainHandlerType="System.ServiceModel.WasHosting.NamedPipeAppDomainProtocolHandler”/> <add name="net.msmq" processHandlerType="System.ServiceModel.WasHosting.MsmqProcessProtocolHandler" appDomainHandlerType="System.ServiceModel.WasHosting.MsmqAppDomainProtocolHandler" validate="false" /> </protocols> </system.web>
      
      





ApplicationHost.config Webサーバーの構成ファイルには、アプリケーション設定とともに、このアプリケーションに送信される着信要求のパラメーターを決定するバインディングが格納されます。 これらのパラメーターは、ネットワークプロトコルの名前、サーバーIPアドレス、ドメイン名、およびサイトポートです。 これらのパラメータは、ターゲットアプリケーションを一意に識別するために、実行中のアプリケーション間で一意である必要があります。 WASはこの制限を監視し、この条件が満たされていないサイトの起動を許可したり、同じリンクを持つサイトの停止を提案したりしません。

  <bindings> <binding protocol="http" bindingInformation="109.120.157.xxx:80:dddddd.info" /> <binding protocol="http" bindingInformation="109.120.157.xxx:80:www.ddddd.info" /> </bindings>
      
      





標準のIIS操作モードでは、WASサービス、各プロトコルリスナーのアダプターサービス(W3SVCを含む)、および各プロトコルのドライバー/リスナー(HTTP.sysを含む)自体が単一のOSで実行されていることに注意してください。コピー。 ただし、個々のリクエストは、異なるワークフローの異なるアプリケーションに送信できます。 一方、異なるプロトコルの要求は、対応するアダプターを介して特定のアプリケーションに送信できます。 どうやら、この動作を正しく実装するために、プロトコルドライバー(プロトコルドライバーアダプター)、アクティベーションサービス(一種のレギュレーター、またはルーター)のアーキテクチャ接続がワークフローでした。



2.4。 アプリケーションプール


Webアプリケーションを構成する場合、要求パラメーターおよびその他の設定へのバインドに加えて、アプリケーションプールのメンバーシップが示されます。 アプリケーションプールはIIS 6の革新であり、Webアプリケーションを互いに分離するように設計されているため、Webサーバー全体の安定性が向上します。 一番下の行は、アプリケーションコードが特別なWindowsプロセスw3wp.exe内で実行されることです。 したがって、Webアプリケーション内の例外はこのプロセスをクラッシュさせるだけで、他のプールでのWebアプリケーションの可用性やIISの動作には影響しません。 さらに、WASサービスは落ちたサイトを再起動しようとするため、外部クライアントはサーバーの問題に気付かないこともあります。



単一のw3wp.exeワークフローのいくつかのパラメーターを管理するために、IISはアプリケーションプールを使用します。 最も一般的に使用されるのは、プロセスを開始するアカウント、リクエストキューの制限、プロセスを自動的に再起動するためのさまざまなタイマーとカウンター、x86 / x64アーキテクチャ(IIS 7.xの場合)、およびその他(図5)、®好奇心の強い読者がMSDNやお気に入りの検索エンジンで簡単に読むことができるもの。 T.O. w3wp.exeプロセスとアプリケーションプールのIDについて(特定の予約があれば、2.5の最後の段落も参照してください)話すことができます。





5高度なアプリケーションプール設定



IIS 7.xのアプリケーションプールの概念における重要な革新は、新しいパラメーター-クラシック(クラシックモード)と組み込みモデル(統合モード)の2つの値を取ることができるコンテナー管理モデルでした。

これらの動作モードの違いを説明するには、IIS 6 / 7.xの「モジュール」の概念とIIS + ASP.NETのイベント駆動型リクエスト処理モデルに精通する必要があります。 このトピックは別の記事に値しますが、残念なことに、どうやらすでに十分ではありません。 ここでは、一般的で重要なポイントのみに注目します。



そのため、IISは要求を処理するときに、一連の特別なコンポーネント(モジュール)を介してワークフロー内で要求を渡します。 たとえば、フィルタリング、リダイレクト、キャッシュ、認証、承認。 そのような各モジュールは特定のイベントに関連付けられており、そのシーケンスはイベント駆動型のリクエスト処理モデルを構成しています。 モジュールは、ネイティブと管理に分かれています。 ネイティブモジュールにはIISが付属し、マネージモジュールには.NET Framework(ASP.NET)が付属しています。 一般に、Webアプリケーションの構成レベルである程度管理できますが、マネージモジュールとのみASP.NETサイトのコードから対話できます。





6. IISのモジュールのイデオロギー。



クラシックコンテナー管理モデルは、IIS 6のワークフロー分離モードとの下位互換性を提供します。ASP.NETサイトへの要求は、最初にネイティブモジュールを通過してから、Aspnet_isapi.dllに転送され、管理環境のモジュールで処理されます IISとASP.NETのこの分離により、認証や承認などの一部の機能が重複します。 また、ネイティブモジュールの動作をプログラムで制御することもできません(例としては、最も燃えているモジュールではありませんが、 この記事の 「サーバーヘッダーを削除する」セクションを参照 )。



埋め込みモデルでは、IISとASP.NETの密接な相互作用が想定されています。 このような処理アーキテクチャでの要求は、確立された一連のイベントを介して渡されます。各イベントでは、ネイティブおよびマネージモジュールを介して要求が渡されます。 このモードでは、IISおよびASP.NET要求処理モデルが単一のモデルに結合されます。これにより、機能の重複を避け、要求処理をより詳細に制御できます。



実際には、Webアプリケーションを開発およびデプロイするときに考慮すべき最も重要なことは、これら2つのモードの部分的な非互換性です。 つまり サイト(より正確には、サイトが動作するアプリケーションプール)を従来のモデルから組み込みモデルに変換する場合、厳密なテストと同様に、コード調整(おそらく重要ではないかもしれません)がほとんど常に必要になります。



2.5。 アプリケーションドメイン、アプリケーション


Webアプリケーションの直接コンテナは、アプリケーションとアプリケーションドメイン(アプリケーションドメイン、AppDomain)です。 多くの場合、これら2つの概念は特定されていますが、それでもこれらはわずかに異なるものです。 アプリケーションはIISの概念であり、アプリケーションドメインはASP.NETからのものです。 さらに、一般的な場合、アプリケーションにはいくつかのドメインがあります。 IISコンソールからアプリケーションを管理できます。アプリケーションドメインはほとんどプログラムで管理されます。 そのため、たとえば、アプリケーションはコンソールから再起動します。 また、web.configを再保存すると、IISアプリケーションに触れることなく再起動されるのはアプリケーションドメインです。



実用的な観点からより重要なのは、アプリケーション/アプリケーションドメインは、ASP.NETサイトのコードのサンドボックスです(プールの場合のような信頼性の高い分離ではなく、それでも)。 応募者にインタビューを依頼した私のお気に入りの質問の1つを紹介します。 Webサイト1とWebサイト2、および静的フィールドField1を持つクラスMyClass1が定義されているライブラリMyLib.dllがあるとします。 したがって、両方のサイトが同じアプリケーションプールを実行しており、同じライブラリMyLib.dllを使用しています。 Website-1はMyClass1.Field1 = 16に書き込みます(図7)。 質問:Webサイト2には変更が反映されますか? 答えはノーです。 しかし、なぜですか? IISアプリケーションでは、単一のワークフロー内で動作する場合でも、互いに素なアドレススペースが割り当てられるため、アセンブリのコピーがWebアプリケーションメモリに読み込まれます(.NET Frameworkでメモリを操作することに関して不正確な可能性がある障害を見つけないでください)。



7.パズルの図。



ここで注意したいもう一つの重要なポイント。 既定では、個々のワークフローはサーバーで使用可能なすべてのプロセッサ/カーネルを使用でき、アプリケーションプールは同じワークフローで実行されるため、Webアプリケーションは1つのIISアプリケーション内で実行されます。 ただし、プールごとのワークフローの数、つまりWebアプリケーションごとのIISアプリケーションの数を増やすことにより、Webガーデンを構成できます。 インターネットでウェブガーデンの情報を簡単に見つけることができるので、ここでは詳細を省略します。 私が警告したい唯一のことは、このツールは生産性を高めるためのツールではないということです。 デフォルトでは、サーバーのすべての計算能力が使用されます。 それどころか、2つ以上の作業プロセスの作業を同期するには、「余分な」CPU時間を要しました。 これは主に、Webアプリケーションの可用性を高めるために行われます。 また、IISでの負荷分散の最も簡単な手段としてのWebファームについても言及する価値があります。これについては、Webにも十分な記事があります。 これは、分散Webアプリケーションの別の例です。 ただし、同じnginxを使用すると、IISに組み込まれた負荷分散は競合に耐えられず、実際の高負荷システムでは、自転車を再発明するか、サードパーティ製品を使用する必要があります。



3.次は?



次に、セクション2.4で説明したように、モジュールの操作(IISの用語で)とイベントモデルを理解する必要があります。イベントモデルでは、要求処理自体が既に行われています。 一般的に言えば、このトピックは別の記事に値しますが、私にとっては十分ではないでしょう。 しかし、これがないと、リクエストを処理するためにパイプライン全体を調べたとは言えません。 したがって、ここでは、好奇心の強い読者が自分で解決できる主なポイントについて簡単に説明します。



上記のセクション2.4で述べたように、IISモジュールはワークフロー内に含まれています。 リクエストは(HttpHandlerとは異なり)順番に渡されます。 それらのセットと順序は、サーバーおよび/または特定のWebアプリケーションの構成によって決まります。 モジュールは、承認、キャッシュ、カスタムロギング、圧縮、静的コンテンツの返還、そしてもちろん、特定のURLでのHTMLページの生成など、個別の狭い焦点のタスク向けに設計されています。



既に知っているように、IISには、ネイティブと管理の2つのタイプのモジュールがあります。 モジュールの正確なリストは、MSDNまたはRegan Templinの記事で見つけることができます。 リダイレクト用など、いつでもモジュールを作成できます。 もちろん、ほとんどの場合、マネージモジュールを使用します。 実装が最も簡単です。 ところで、ASP.NET WebFormsとMVCは、そのようなマネージモジュールの形で機能します。 T.ch. 私は個人的にholivara WebForms vs. MVCは、笑顔と荒らされた欲求を引き起こします。 IISとASP.NETの原則を知っていれば、自分で好きなパターンを実装できます。



次のレベルの考慮事項では、HttpHandlersやページ処理イベントなどのASP.NETコンポーネントに遭遇します。 これについて多くの記事が書かれています。 このままでいる理由はありません。 面接に行く人に、会議前に検索エンジン「ASP.NETページライフサイクル」で得点するようアドバイスすることができるのは、これがもちろん、ASP.NETの開発者であると考える専門家にとって恥ずかしいことです。



applicationHost.configのネイティブモジュールのデフォルト設定の例
 <system.webServer> <globalModules> <add name="UriCacheModule" image="%windir%\System32\inetsrv\cachuri.dll" /> <add name="FileCacheModule" image="%windir%\System32\inetsrv\cachfile.dll" /> <add name="TokenCacheModule" image="%windir%\System32\inetsrv\cachtokn.dll" /> <add name="HttpCacheModule" image="%windir%\System32\inetsrv\cachhttp.dll" /> <add name="StaticCompressionModule" image="%windir%\System32\inetsrv\compstat.dll" /> <add name="DefaultDocumentModule" image="%windir%\System32\inetsrv\defdoc.dll" /> <add name="DirectoryListingModule" image="%windir%\System32\inetsrv\dirlist.dll" /> <add name="ProtocolSupportModule" image="%windir%\System32\inetsrv\protsup.dll" /> <add name="HttpRedirectionModule" image="%windir%\System32\inetsrv\redirect.dll" /> <add name="ServerSideIncludeModule" image="%windir%\System32\inetsrv\iis_ssi.dll" /> <add name="StaticFileModule" image="%windir%\System32\inetsrv\static.dll" /> <add name="AnonymousAuthenticationModule" image="%windir%\System32\inetsrv\authanon.dll" /> <add name="CertificateMappingAuthenticationModule" image="%windir%\System32\inetsrv\authcert.dll" /> <add name="UrlAuthorizationModule" image="%windir%\System32\inetsrv\urlauthz.dll" /> <add name="BasicAuthenticationModule" image="%windir%\System32\inetsrv\authbas.dll" /> <add name="WindowsAuthenticationModule" image="%windir%\System32\inetsrv\authsspi.dll" /> <add name="DigestAuthenticationModule" image="%windir%\System32\inetsrv\authmd5.dll" /> <add name="IISCertificateMappingAuthenticationModule" image="%windir%\System32\inetsrv\authmap.dll" /> <add name="IpRestrictionModule" image="%windir%\System32\inetsrv\iprestr.dll" /> <add name="RequestFilteringModule" image="%windir%\System32\inetsrv\modrqflt.dll" /> <add name="CustomLoggingModule" image="%windir%\System32\inetsrv\logcust.dll" /> <add name="CustomErrorModule" image="%windir%\System32\inetsrv\custerr.dll" /> <add name="HttpLoggingModule" image="%windir%\System32\inetsrv\loghttp.dll" /> <add name="TracingModule" image="%windir%\System32\inetsrv\iisetw.dll" /> <add name="FailedRequestsTracingModule" image="%windir%\System32\inetsrv\iisfreb.dll" /> <add name="RequestMonitorModule" image="%windir%\System32\inetsrv\iisreqs.dll" /> <add name="IsapiModule" image="%windir%\System32\inetsrv\isapi.dll" /> <add name="IsapiFilterModule" image="%windir%\System32\inetsrv\filter.dll" /> <add name="ConfigurationValidationModule" image="%windir%\System32\inetsrv\validcfg.dll" /> <add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" /> <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" /> <add name="ManagedEngineV4.0_32bit" image="c:\Windows\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" /> <add name="ManagedEngineV4.0_64bit" image="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" /> </globalModules> </system.webServer>
      
      







applicationHost.configのマネージモジュールのデフォルト設定の例
 <system.webServer> <modules> *** <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" /> <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" /> <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" /> <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" /> <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" /> <add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" /> <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" /> <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" /> <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" /> <add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" /> <add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" /> <add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" /> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" /> <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" /> </modules> </system.webServer>
      
      







applicationHost.configのHTTPハンドラーのデフォルト設定の例
 <system.webServer> <handlers accessPolicy="Read, Script"> *** <add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode" /> <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" /> <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode" /> <add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" /> <add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" /> <add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" /> <add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> *** </handlers> </system.webServer>
      
      







ASP.NET 2.0 WebFormsのページライフサイクル






ASP.NET 4.0 WebFormsのページライフサイクル
画像







ソース



  1. Our Everything- IISアーキテクチャの紹介
  2. アプリケーションドメインの概要
  3. アプリケーションと Appdomain
  4. IIS 5.0および6.0のASP.NETアプリケーションライフサイクルの概要
  5. IIS 7.0のASP.NETアプリケーションライフサイクルの概要
  6. 初心者向けガイド:IISがASP.NET要求を処理する方法
  7. Exchange Server 2003サービスの依存関係:インターネットインフォメーションサービス
  8. すべてのASP.NET開発者が知っておくべきIISパイプラインのHTTP要求ライフサイクルイベント
  9. WindowsのHttp.sysレジストリ設定
  10. IIS 7.0アーキテクチャについて:非HTTP要求処理
  11. Windows Server 2008のイベントとエラー:IIS Windowsプロセスアクティブ化サービス(WAS)
  12. Windows Server 2008のイベントとエラー:IIS World Wide Web発行サービス(W3SVC)
  13. Windows Server 2008 R2:Windowsプロセスアクティブ化サービス(WAS)の概要



All Articles