本文基於 ASP.NET 2.0 原始碼,剖析請求處理流程與頁面編譯模型,協助開發者理解核心運作機制。建議搭配 Reflector 等反編譯工具邊看源碼邊閱讀。
| 類別 | 命名空間 | 核心職責 |
|---|---|---|
HttpRuntime | System.Web | 應用程式啟動、請求佇列管理、快取控制 |
HttpApplicationFactory | System.Web | HttpApplication 實例池管理 |
HttpApplication | System.Web | 請求管線事件、模組管理、處理常式對應 |
BuildManager | System.Web.Compilation | 動態編譯協調、BuildProvider 管理 |
ApplicationBuildProvider | System.Web.Compilation | 應用程式層級建構(Global.asax、資源檔等) |
BuildProvidersCompiler | System.Web.Compilation | 編譯器封裝、組件產生 |
PageHandlerFactory | System.Web.UI | .aspx 頁面處理常式工廠 |
aspnet_isapi.dll → 傳遞至 ASP.NET 執行階段HttpRuntime.ProcessRequest 建立 HttpContextHttpApplicationFactory 取得/建立 HttpApplication 實例Application_Start、模組 Init)BeginRequest → AuthenticateRequest → AuthorizeRequest → ... → PostRequestHandlerExecute → EndRequest)PageHandlerFactory.GetHandler 解析 .aspx 虛擬路徑BuildManager 協調編譯:BuildProvider 解析原始碼 → 產生程式碼 DOM → 編譯為組件PageHandlerFactory 實例化頁面類別Init → Load → Render → Unload)
圖示:請求處理簡要流程圖
ASP.NET 2.0 引入 動態編譯 與 預先編譯 兩種模式:
aspnet_compiler.exe 部署前編譯整站,優點:首次請求無延遲、原始碼保護(含 .aspx 標記)、編譯錯誤提前發現。理解執行階段架構有助於排查效能瓶頸、部署策略選擇與擴充管線行為。