IIS 7 引入**應用程序池托管管道模式**選項:經典 與 集成。這不僅是兼容性開關,更決定了請求處理架構、配置體系、擴展能力。本文從架構原理、配置差異、遷移工具、常見錯誤 (500.22)、HTTP 錯誤頁配置、模塊替換擴展六個維度深度解析。
| 配置項 | 經典模式 ( | 集成模式 ( | 說明 |
|---|---|---|---|
| HTTP 模塊 | ` | ` | 集成模式下 ` |
| HTTP 處理程序 | ` | ` | 集成模式下 ` |
| 自定義錯誤頁 | ` | ` | 不同節點,語法不同 |
| 身份驗證 | ` | ` | 集成模式需雙重配置 |
| 授權 | ` | ` |
# 命令行遷移經典配置為集成配置
%windir%\system32\inetsrv\appcmd.exe migrate config "Default Web Site/MyApp"
# 輸出示例:
# Migrated configuration for 'Default Web Site/MyApp'
# ->
# ->
# -> (部分)
遷移後**必須人工檢查**:`customErrors` → `httpErrors` 轉換不完全,需手動補充 `errorMode`、`responseMode`。
錯誤訊息:
HTTP Error 500.22 - Internal Server Error
An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.
原因:集成模式應用中存在 `
解決:
| 屬性 | 可選值 | 含義 |
|---|---|---|
| errorMode | DetailedLocalOnly / Custom / Detailed | 本地顯示詳細錯誤 / 遠程顯示自定義 / 都顯示詳細 |
| responseMode | File / ExecuteURL / Redirect | 靜態文件 / 服務端執行 URL / 302 重定向 |
| existingResponse | Auto / Replace / PassThrough | 模塊生成響應時:自動 / 替換 / 透傳 |
優先級:`Application_Error` 事件 > `customErrors` > `httpErrors` (IIS 級)。
集成模式允許**完全替換內置模塊**:
甚至可編寫**純托管 IIS 管理工具** (Microsoft.Web.Administration API) 程序化創建站點、應用程序池、虛擬目錄。
| 場景 | 推薦模式 | 理由 |
|---|---|---|
| 新建 ASP.NET 4.5+ / Core 應用 | 集成 | 性能最佳、功能最全、未來標準 |
| 舊應用 (.NET 2.0/3.5) 無法修改代碼 | 經典 | 零修改兼容、避免遷移風險 |
| 混合部署:ASP.NET + PHP + 靜態站點 | 集成 | 統一認證、緩存、重寫、壓縮 |
| 需自定義模塊攔截所有請求 | 集成 | 托管模塊覆蓋全管道 |
| Web Farm 共享配置、集中管理 | 集成 | 配置體系統一、appcmd 批量操作 |
**集成模式是 IIS 7+ 核心架構**,將 ASP.NET 從外掛提升為管道原生組件,實現單一管道、統一模塊、托管功能通用化。遷移關鍵在於 `