首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 底層架構深度解析:.NET 執行階段與 ISAPI 整合機制

     編輯:關於ASP.NET

ASP.NET 的請求處理管線核心在於 ISAPIRuntime 物件,它是連接 IIS 與 .NET 執行階段的關鍵橋樑。每當執行階段啟動並運行時,ISAPI 程式碼會呼叫 ISAPIRuntime.ProcessRequest() 方法,這正是進入 ASP.NET 管線的真正入口點。

多執行緒環境下的請求處理

ISAPI 本質上是多執行緒的,因此請求會透過 AppDomainFactory.Create() 回傳的參考在多執行緒環境中被並行處理。以下是反編譯後的 ProcessRequest 核心邏輯:

public int ProcessRequest(IntPtr ecb, int iWRType)
{
    HttpWorkerRequest request1 = ISAPIWorkerRequest.CreateWorkerRequest(ecb, iWRType);
    string text1 = request1.GetAppPathTranslated();
    string text2 = HttpRuntime.AppDomainAppPathInternal;
    
    if (((text2 == null) || text1.Equals(".")) || 
        (string.Compare(text1, text2, true, CultureInfo.InvariantCulture) == 0))
    {
        HttpRuntime.ProcessRequest(request1);
        return 0;
    }
    
    HttpRuntime.ShutdownAppDomain("Physical application path changed from " + text2 + " to " + text1);
    return 1;
}

關鍵物件角色解析

ISAPIWorkerRequest:請求上下文的建構者

System.Web.Hosting.ISAPIWorkerRequest 是 HttpWorkerRequest 的抽象子類別,負責將非受控的 ECB (Extension Control Block) 封裝為受控的請求上下文。它透過工廠方法 CreateWorkerRequest 根據第二個參數建立三種不同的實作:

  • ISAPIWorkerRequestInProc - 處理序內模式 (IIS 5)
  • ISAPIWorkerRequestInProcForIIS6 - IIS 6 處理序內模式
  • ISAPIWorkerRequestOutOfProc - 處理序外模式

HttpWorkerRequest:統一抽象介面

抽象的 HttpWorkerRequest 類別在低層介面上提供高層抽象,封裝了資料來源的差異。無論資料來自 CGI 伺服器、Web 瀏覽器控制項或自定義機制,ASP.NET 都能透過統一介面接收資訊。在 IIS 環境下,這層抽象建構在 ISAPI ECB 區塊之上。

請求字串值的提取流程

ISAPIWorkerRequest 掛載 ISAPI ECB,並根據需要從中提取資訊。例如查詢字串值的提取過程展示了非受控資料如何轉換為受控物件可存取的格式。

深入理解這層架構,有助於開發者在效能調優、除錯複雜請求流程時具備系統級視野。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved