熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET底層架構之從浏覽器到ASP.NET

2013-11-13 10:08:40  來源: .NET編程 
     讓我們從一個典型的ASPNET Web請求的生命周期的起點開始當用戶輸入一個URL點擊了一個超鏈接或者提交了一個HTML表單(form)(一個POST請求相對於前兩者在一般意義上都是GET請求)或者一個客戶端程序可能調用了一個基於ASPNET的WebService(同樣由ASPNET來處理)在Web服務器端IIS獲得這個請求在最底層ASPNET和IIS通過ISAPI擴展進行交互在ASPNET環境中這個請求通常被路由到一個擴展名為aspx的頁面上但是這個流程是怎麼工作的完全依賴於處理特定擴展名的HTTP Handler是怎麼實現的在IIS中aspx通過應用程序擴展(又稱為腳本映射)被映射到ASPNET的ISAPI擴展DLLaspnet_isapidll每一個請求都需要通過一個被注冊到aspnet_isapidll的擴展名來觸發ASPNET(來處理這個請求)
  
    依賴於擴展名ASPNET將請求路由到一個合適的處理器(handler)上這個處理器負責獲取這個請求例如WebService的asmx擴展名不會將請求路由到磁盤上的一個頁面而是一個由特殊屬性(Attribute)標記為WebService的類上許多其他處理器和ASPNET安裝當然你也可以自定義處理器所有這些HttpHandler在IIS中被配置為指向ASPNET ISAPI擴展並在webconfig(譯著:ASPNET中自帶的handler是在machineconfig中配置的當然可以在nfig中覆蓋配置)被配置來將請求路由到指定的HTTP Handler上每個handler都是一個處理特殊擴展的NET類可以從一個簡單的只包含幾行代碼的Hello World類到非常復雜的handler如ASPNET的頁面或者WebService的handler當前只要了解ASPNET的映射機制是使用擴展名來從ISAPI接收請求並將其路由到處理這個請求的handler上就可以了
  
    對在IIS中自定義Web請求處理來說ISAPI是第一個也是最高效的入口
  
    ISAPI連接
  
    ISAPI是底層的非托管Win APIISAPI定義的接口非常簡單並且是為性能做了優化的它們是非常底層的處理指針和函數指針表來進行回調但是它們提供了最底層和面向效率的接口使開發者和工具提供商可以用它來掛接到IIS上因為ISAPI非常底層所以它並不適合來開發應用級的代碼而且ISAPI傾向於主要被用於橋接接口向上層工具提供應用服務器類型的功能例如ASP和ASPNET都是建立在ISAPI上的Cold Fusion運行在IIS上的多數PerlPHP以及JSP實現很多第三方解決方案(如我的Wisual FoxPro的Web連接框架)都是如此ISAPI是一個傑出的工具可以為上層應用提供高效的管道接口這樣上層應用可以抽象出ISAPI提供的信息在ASP和ASPNET中將ISAPI接口提供的信息抽象成了類型Request和Response這樣的對象通過它們來讀取ISAPI請求中對應的信息將ISAPI想像成管道對ASPNET來說ISAPI dll是非常的只是作為一個路由機制來將原始的請求轉發到ASPNET運行時所有那些沉重的負擔和處理甚至請求線程的管理都發生在ASPNET引擎內部和你的代碼中
  
    作為最為協議ISAPI同時支持ISAPI擴展和ISAPI過濾器(Filter)擴展是一個請求處理接口提供了處理Web服務器的輸入輸出的邏輯它本質上是一個處理(事物?)接口ASP和ASPNET都被實現為ISAPI擴展ISAPI過濾器是掛接接口提供了查看進入IIS的每一個請求的能力並能修改請求的內容或者改變功能型的行為例如認證等順便提一下ASPNET通過了兩種概念映射了類似ISAPI的功能:Http Handler類似擴展Http Module類似過濾器我們將在後面詳細討論它們
  
    ISAPI是開始一個ASPNET請求的最初的入口ASPNET映射了好幾個擴展名到它的ISAPI擴展此擴展位於NET框架的目錄下:
  
    <NET FrameworkDir>\aspnet_isapidll
  
    你可以在IIS服務管理界面上看到這些映射如圖查看網站根目錄的屬性中的主目錄配置頁然後查看配置|映射
  
  圖:IIS映射了多種擴展名如ASPX到ASPNET的ISAPI擴展通過這個機制請求會在Web服務器這一層被路由到ASPNET的處理管道
  
    由於NET需要它們中的一部分你不應該設置手動這些擴展名使用aspnet_regiisexe這個工具來確保所有的映射都被正確的設置了:
  
    cd <NetFrameworkDirectory>
  
    aspnet_regiis – i
  
    這個命令將為整個Web站點注冊特定版本的ASPNET運行時包括腳本 (擴展名) 映射和客戶端腳本庫(包括進行控件驗證的代碼等)注意它注冊的是<Net FrameworkDirectory>中安裝的特定版本的CLR(如)aspnet_regiis的選項令您可以對不同的虛擬目錄進行配置每個版本的NET框架都有自己不同版本的aspnet_regiis工具你需要運行對應版本的aspnet_regiis來為web站點或者虛擬目錄來配置指定版本的NET框架從ASPNET開始提供了ASPNET配置頁面可以通過這個頁面在IIS管理控制台來交互的配置NET版本  做人要厚道請注明轉自酷網動力(wwwASPCOOLCOM)

From:http://tw.wingwit.com/Article/program/net/201311/12692.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.