Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

IIS 7.5 應用程式集區:整合模式 vs 經典模式差異與 HttpModule 遷移實戰

編輯:關於伺服器

將 IIS 應用程式集區從 .NET 2.0/3.5 (經典模式) 升級至 .NET 4.0 (整合模式) 時,httpModules 與 httpHandlers 設定需遷移至 <system.webServer> 區段,否則模組不會執行。本文以自訂 HttpModule 為例實測差異與解決方案。

測試環境與程式碼

public class MyHttpModule : IHttpModule {
    public void Dispose() { }
    public void Init(HttpApplication context) {
        context.BeginRequest += (s, e) => {
            var app = (HttpApplication)s;
            app.Response.Clear();
            app.Response.Write("HttpModule");
            app.Response.End();
        };
    }
}

經典模式:在 <system.web> 註冊

<system.web>
  <httpModules>
    <add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication" />
  </httpModules>
</system.web>

✅ 頁面輸出「HttpModule」,模組正常執行。

整合模式:直接切換集區 → 模組失效

切換至整合模式應用程式集區後,頁面無輸出,證明 <system.web>/httpModules 在整合管線中不再被讀取。

整合模式正確註冊方式:<system.webServer>/modules

<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules>
    <remove name="ScriptModule" />
    <add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication" />
    <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </modules>
</system.webServer>

關鍵點解析

  • validateIntegratedModeConfiguration="false":關鍵,關閉 IIS 對 <system.web> 區段的相容性檢查,否則會拋出 HTTP 500.22 錯誤(偵測到不適用於整合模式的 ASP.NET 設定)。
  • preCondition="managedHandler":指定模組僅對受控處理常式生效,避免靜態檔案請求觸發模組。
  • 所有 httpModules、httpHandlers 均需遷移至 <system.webServer>/modules、/handlers。

常見遷移錯誤與解決

錯誤原因解決
HTTP 500.22未加 validateIntegratedModeConfiguration="false",且保留 <system.web>/httpModules加入該屬性,或移除舊區段註冊
模組不執行僅在 <system.web> 註冊同步在 <system.webServer>/modules 註冊
靜態檔案也觸發模組缺少 preCondition="managedHandler"加上前置條件限制

結語:整合模式是 .NET 4.0+ 的預設且推薦管線,統一處理所有請求(含靜態檔案),效能更優。遷移核心在於將模組/處理常式註冊移至 system.webServer 並關閉相容性驗證。

Copyright © Windows教程網 All Rights Reserved