• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • ASP.NET HTTP運行時組成詳解(2)

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    ASP.net 結構的組件 執行 ASP.NET 應用程序需要宿主 Web 服務器 的支持。在 Microsoft? Windows? 的 Server 平臺中,Web 服務器由名為 inetinfo.exe 的 IIS 可執行文件表示。Windows 2000 及以上版本的操作系統本身均提供了 Web 服務器。但需要注意,在 Micr
         ASP.net 結構的組件
      
        執行 ASP.NET 應用程序需要宿主 Web 服務器的支持。在 Microsoft? Windows? 的 Server 平臺中,Web 服務器由名為 inetinfo.exe 的 IIS 可執行文件表示。Windows 2000 及以上版本的操作系統本身均提供了 Web 服務器。但需要注意,在 Microsoft? Windows Server™ 2003 中,并未默認安裝 IIS 和 ASP.NET,必須通過單擊“控制面板”中的“添加或刪除程序”小程序將其添加到系統中。
      
        IIS 是一個未托管的可執行程序,它提供了一個基于 ISAPI 擴展模塊和篩選器模塊的可擴展模型。通過編寫此類模塊,開發人員可以直接管理對特定資源類型的請求,并在各個預定義的步驟中接收當前請求。擴展和篩選器是一些 DLL,可以導出一些具有已知名稱和簽名的函數。這些插件組件是在 IIS 配置數據庫中注冊并配置的。
       
        只有少數幾種被客戶端請求的資源類型由 IIS 直接處理。例如,對 HTML 頁面、文本文件、JPEG 和 GIF 圖像的傳入請求由 IIS 處理。對 Active Server Page (*.asp) 文件的請求通過調用名為 asp.dll 的 ASP 專用擴展模塊進行解析。同樣,對 ASP.NET 資源(例如,*.aspx、*.asmx、*.ashx)的請求將傳遞到 ASP.NET ISAPI 擴展。該系統組件是一個名為 aspnet_isapi.dll 的 Win32 DLL。ASP.NET 擴展可以處理多種資源類型,包括 Web 服務和 HTTP 處理程序調用。
      
        ASP.NET ISAPI 擴展是一個 Win32 DLL,未集成托管代碼。它是接收和分派對各種 ASP.NET 資源的請求的控制中心。按照設計,該模塊存在于 IIS 進程中,在具有管理員權限的 SYSTEM 帳戶下運行。開發人員和系統管理員不能修改此帳戶。ASP.NET ISAPI 擴展負責調用 ASP.NET 輔助進程 (aspnet_wp.exe),而該進程又負責控制請求的執行。除了對請求進行安排以外,ASP.NET ISAPI 還監視輔助進程的運行情況,并在性能降低到一定程度時將進程取消。
      
        輔助進程是一小段 Win32 shell 代碼,集成了公共語言運行庫 (CLR) 并運行托管代碼。它負責處理對 ASPX、ASMX 和 ASHX 資源的請求。一般來說,此進程在一臺給定的計算機中只有一個實例。所有當前激活的 ASP.NET 應用程序均在其中運行,每個應用程序都位于一個獨立的 AppDomain 中。但是,如前所述,輔助進程支持 Web Garden 模式,即進程的相同副本都運行在與進程密切相關的 CPU 中。(更多內容,請參閱本文后面的“Web Garden 模型”部分。)
      
        ISAPI 和輔助進程之間的通訊是使用一組命名管道進行的。命名管道是一種 Win32 機制,用于跨進程邊界傳輸數據。顧名思義,命名管道的工作方式與管道相似:在一端輸入數據,在另一端輸出相同的數據。建立的管道既可以連接本地進程,也可以連接遠程計算機上運行的進程。對于本地進程間通訊,管道是 Windows 中的最有效、最靈活的工具。
      
        為確保獲得最優性能,aspnet_isapi 使用異步命名管道來將請求轉發給輔助進程并獲得響應。另一方面,輔助進程在需要查詢有關 IIS 環境的信息(即服務器變量)時又使用同步管道。aspnet_isapi 模塊創建固定數量的命名管道,并使用重疊的操作以通過小的線程池處理同一時間進行的連接。當通過管道進行的數據交換操作結束后,完成例程將斷開客戶端,并重新使用管道實例為新的客戶端服務。線程池和重疊操作均可以保證使 ASP.NET ISAPI 的性能達到令人滿意的水平。但是,aspnet_isapi 擴展決不會處理 HTTP 請求。
      
        ASP.NET 請求的處理邏輯可以概括為以下步驟:
      
        當請求到達時,IIS 檢查資源類型并調用 ASP.NET ISAPI 擴展。如果啟用了默認的進程模型,aspnet_isapi 會將請求排隊,并將請求分配給輔助進程。所有的請求數據都通過異步 I/O 發送。如果啟用了 IIS 6 進程模型,請求將自動在輔助進程 (w3wp.exe) 中排隊,此輔助進程用于處理應用程序所屬的 IIS 應用程序池。IIS 6 輔助進程不了解 ASP.NET 和托管代碼的任何情況,它只是處理 *.aspx 擴展并加載 aspnet_isapi 模塊。當 ASP.NET ISAPI 在 IIS 6 進程模型中運行時,它的工作方式有所不同,僅在 w3wp.exe 輔助進程的上下文中加載 CLR。
      
        收到請求后,ASP.NET 輔助進程將通知 ASP.NET ISAPI,它將為請求服務。通知通過同步 I/O 實現。之所以使用同步模型,是因為請求只有在 ISAPI 內部請求表中被標記為“executing”,輔助進程才能開始處理它。如果請求已經由特殊的輔助進程進行處理,則不能再將它指定到其他進程,除非原始進程已取消。
      在輔助進程的上下文中執行請求。有時,輔助進程可能需要回調 ISAPI 以完成請求,也就是需要說枚舉服務器變量。這種情況下,輔助進程將使用同步管道,因為這樣可以保持請求處理邏輯的順序。
      
        完成后,響應被發送到打開了異步管道的 aspnet_isapi?,F在,請求的狀態變為“Done”,之后將從請求表中被刪除。如果輔助進程崩潰,正在處理的所有請求仍將保持“executing”狀態并持續一段時間。如果 aspnet_isapi 檢測到輔助進程已取消,它將自動終止請求并釋放所有相關的 IIS 資源。
      
        以上說明是指默認的 ASP.NET 進程模型,即在 IIS 5.x 中運行的工作模型。IIS 6(Windows Server 2003 提供)的默認工作方式對 ASP.NET 進程模型也有影響。當集成在 IIS 6.0 中時,ASP.NET 1.1 會自動調整自己的工作方式以適應宿主環境。這時,不再需要使用 aspnet_wp 輔助進程,machine.config 文件中定義的某些配置參數也被忽略。從 ASP.NET 的角度來看,IIS 6 的最大改變是有關請求的一切都在 aspnet_isapi 的控制之下,且都處在 w3wp.exe 輔助進程的上下文中。輔助進程的帳戶是為 Web 應用程序所屬的應用程序池設置的帳戶。默認情況下,該帳戶是 NETWORKSERVICE—,它是一個內置的弱帳戶,在功能上與 ASPNET 等價。
      
        輔助進程受一個名為進程回收 (Recycling) 的功能的控制。進程回收具有 aspnet_isapi 功能,當現有進程消耗的內存太多、響應太慢或掛起時可以自動啟動新進程。出現這種情況時,新請求將由新實例處理,新實例從而變成新的活動進程。但是,指定給舊進程的所有請求仍保持掛起狀態。如果舊進程結束了掛起的請求并進入空閑狀態,該進程即終止。如果輔助進程崩潰,或者由于其他原因停止處理請求,則所有掛起的請求將被重新指定給新進程。
      
        盡管 ASP.NET ISAPI 和輔助進程是 ASP.NET 運行時結構的主要組成部分,但還有其他一些可執行文件也發揮著作用。下表列出了所有這些組件。
      
        表 1:構成 ASP.NET 運行時環境的可執行文件
      
      名稱 類型 帳戶
      aspnet_isapi.dll Win32 DLL(ISAPI 擴展) LOCAL SYSTEM
      aspnet_wp.exe Win32 EXE ASPNET
      aspnet_filter.dll Win32 DLL(ISAPI 篩選器) LOCAL SYSTEM
      aspnet_state.exe Win32 NT Service ASPNET
      
        aspnet_filter.dll 組件是一個小的 Win32 ISAPI 篩選器,用來備份 ASP.NET 應用程序的無 Cookie 會話狀態。在 Windows Server 2003 中,當啟用 IIS 6 進程模型時,aspnet_filter.dll 還將篩選出 Bin 目錄中對非可執行資源的請求。
      
        aspnet_state.exe 的作用對 Web 應用程序更為重要,因為它用于管理會話狀態。該項服務是可選的,可以用來在 Web 應用程序內存空間之外保存會話狀態數據。該可執行文件是一種 NT 服務,既可以在本地運行,也可以遠程運行。當該服務被激活后,可以將 ASP.NET 應用程序配置為將所有會話信息保存在此進程的內存中。一種類似的方案是提供更為可靠的數據存儲方式,不受進程回收和 ASP.NET 應用程序故障的影響。該服務在 ASPNET 本地帳戶下運行,但可以使用服務控制管理器 (Service Control Manager) 接口來配置它。
      
        另一個應該介紹的可執行文件是 aspnet_regiis.exe,盡管嚴格來講,它并不屬于 ASP.NET 運行時結構。該實用程序可以用來配置環境,以在一臺計算機上并行執行不同版本的 ASP.NET,還可用于維修 IIS 和 ASP.NET 損壞的配置。該實用程序的工作方式是更新存儲在 IIS 配置數據庫的根目錄和子目錄中的腳本映射。腳本映射是資源類型和 ASP.NET 模塊之間的一種關聯關系。最后,還可以使用該工具來顯示已安裝的 ASP.NET 版本的狀態,執行其他配置操作,如授予對特定文件夾的 NTFS 權限、創建客戶腳本目錄。
      
      

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>