Skip to content

MS_IISOperationModel

nishi_74322014 edited this page Aug 19, 2026 · 1 revision

IISの動作モデル

概要

IIS の 2 つの動作モデルについて。

クラシックモード

(記載なし)

統合モード

マネージド / アンマネージド

マネージド

HTTP ハンドラーも HTTP モジュールも、混在させることができる。

アンマネージド

HTTP ハンドラーも HTTP モジュールも、混在させることができる。
(厳密には、ネイティブの場合は HTTP ハンドラーも HTTP モジュールとして実装。)

移行メモ(体裁): 原典の「HTTPモジュールも、を混在させる」は
助詞が重複していたため修正した(2 箇所)。

移行メモ: 原典の「クラシックモード」節は見出しのみで本文が存在しない。
以下の補足で 2 つのモードの違いを補う。

補足(クラシック モードと統合モードの違い): この 2 つは
ASP.NET と IIS の関係が根本的に異なる。

【クラシック モード】(IIS 6 以前と同じ)
  要求 → IIS のパイプライン
           ├─ 静的ファイル → IIS が処理
           └─ *.aspx      → ISAPI(aspnet_isapi.dll)→ ASP.NET のパイプライン
                             ↑ ASP.NET は「IIS にぶら下がる拡張」でしかない

【統合モード】(IIS 7 以降の既定)
  要求 → 統合されたパイプライン
           ├─ ネイティブ モジュール(C++)
           └─ マネージド モジュール(.NET)  ← 同じ順序の中に混在できる

つまり、統合モードでは
ASP.NET のモジュールが「すべての要求」に対して効く

クラシック モード 統合モード
パイプライン 2 つ(IIS と ASP.NET が別) 1 つに統合
ASP.NET の認証・URL 書き換え .aspx 等にしか効かない 静的ファイルや PHP にも効く
モジュールの登録先 <system.web>/<httpModules> <system.webServer>/<modules>
実行順序 ISAPI として最後に呼ばれる ネイティブと混在して順序制御できる

移行時の典型的な問題として、

  • <system.web> に書いたモジュール/ハンドラーが効かない
    (統合モードでは <system.webServer> に書く必要がある)、
  • 起動時に HTTP エラー 500.22 / 500.23
    (「統合マネージ パイプライン モードでは適用できない ASP.NET 設定」)

が発生する。
応急処置としてアプリケーション プールをクラシック モードに戻せるが、
本来は構成ファイルを直すのが正しい

HTTPハンドラー

インプロセス

IIS のワーカープロセス内で処理する。

  • 静的ファイルハンドラー
  • ASP.NET のハンドラー
    • ASP.NET Web Forms とか MVC
    • ASP.NET 5 では使用されない。

アウトプロセス

IIS のワーカープロセス外(外部のプロセス)で処理する。

  • CGI ハンドラー
    下位互換
  • FastCGI ハンドラー
    最近の IIS で PHP をホストする際に利用する。
  • HttpPlatformHandler
    HTTP プロトコルでプロセス間通信する。

補足(インプロセス/アウトプロセスの意味と、ASP.NET Core での再登場): 本文の
「ASP.NET 5 では使用されない」は、
**ASP.NET Core(開発中の名称が ASP.NET 5 だった)**を指している。

ASP.NET Core は Kestrel という独自の Web サーバを持ち、
IIS はその前段のリバース プロキシとして働く。
このとき、インプロセス/アウトプロセスという語が再び登場するが、
意味が本文とは少しずれるため整理しておく。

世代 インプロセス アウトプロセス
ASP.NET(Framework) IIS のワーカー プロセス(w3wp.exe)内で ASP.NET ハンドラーが処理 CGI / FastCGI / HttpPlatformHandler で別プロセスへ
ASP.NET Core w3wp.exe の中で Kestrel が動くInProcess。既定・高速) dotnet.exe を別に起動し、IIS が HTTP で中継(OutOfProcess

ASP.NET Core では **ASP.NET Core モジュール(ANCM)**が
この振り分けを担当しており、
本文の HttpPlatformHandler の後継にあたる。

実務上の要点は、

  • インプロセスの方が速い(プロセス間のホップが無い)ので既定はこちら、
  • アウトプロセスは Kestrel を直接起動するため、
    IIS 以外(Linux、コンテナ)と同じ挙動になり、移植性の検証に向く

という点である。

参考

(記載なし)


Tags: 移行, Windows, IIS

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally