ASP.NET應用程序的web.config文件
ASP.NET不是asp的簡單升級,而是微軟。Net計劃中的一個重要組成部分,它依托。Net的多語言與強大的類庫支持,引進了服務端 HTML控件與WEB控件,自動處理控件的客戶端與服務端的 交互,為開發(fā)人員提供了類似Windows下窗口編程的界面,為開發(fā)大型網(wǎng)絡應用程序功能提 供了良好的編程接口,也能夠極大地提高開發(fā)人員的工作效率。
然而,"一次轉(zhuǎn)換,兩次編譯"過程使得aspx文件在***執(zhí)行(或更新后***運行)時顯得略有不足,特別是在擁有大量aspx及codebehind的代碼文件的應用環(huán)境中,把aspx文件編譯成DLL(在。Net中,被稱為應用程序集)后再發(fā)布,省去"一次轉(zhuǎn)換、一次編譯"的時間及CPU占用率,對提高WEB服務的整體性能會有較大的提升。當然,編譯成DLL后,對源代碼的保密性也有一定程度的提高。
本文通過對ASP.NET的基本處理流程及一個偶然發(fā)現(xiàn)的秘密的分析,介紹了在ASP.NET中 如何建立aspx到DLL的映射,如何開發(fā)一個可以處理HTTP請求/響應的DLL,以及如何設置"陷阱",把現(xiàn)成的單個aspx文件與 codebehind的aspx文件編譯成DLL的過程,文章***,還介紹了一個在實際操作過程的小技巧。
由于本文要涉及ASP.NET應用程序,web.config文件等,為了使讀者能更好地理解本文內(nèi)容,也為了使本文看上去不顯累贅,先就本文相對應的系統(tǒng)環(huán)境作一介紹:
系統(tǒng)環(huán)境:Win2000(SP3)+ IIS5 + .Net Framework 1.0(中文版)。
服務器名稱:由于本文的例子均在本機上測試,服務器名稱為localhost.
IIS設置:建立虛擬目錄dlltest(真實路徑為w:\wwwroot\dlltest),并把它設為應用程序,在dlltest下建立bin目錄。所有源文件將放在dlltest目錄下,而所有dll文件將放在dlltest\bin目錄下。
ASP.NET應用程序配置文件——web.config在dlltest目錄下建立一個web.config文件,初始時該文件內(nèi)容如下:
- <?xml version="1.0"?>
- <configuration>
- <system.web />
- </configuration>
命令窗口(DOS窗口)
打開命令窗口,并用cd命令使當前目錄為w:\wwwroot\dlltest.
建立aspx到dll的映射
首先讓我們來看看一般情況下aspx文件是如何被ASP.NET處理的:
當一個HTTP請求(例如"http://webserver/webapp/webpage.aspx") 從客戶端發(fā)送到IIS服務器時,IIS捕獲并分析這個請求,
◆當它分析到這個請求是一個aspx頁面時,立即以 "/webapp/webpage.aspx"為參數(shù)調(diào)用ASP.NET運行環(huán)境(aspnet_wp.exe),
◆ASP.NET環(huán)境啟動后,檢查 "/webapp/webpage.aspx"是否存在,若不存在,則向客戶端返回HTTP 404(File not found)錯誤,
◆否則在 ASP.NET 的臨時目錄中查找相應的dll文件,若不存在或者該dll比aspx源文件"舊",則調(diào)用csc編譯器(若aspx的服務端腳本語言是 VB或JScript,則調(diào)用相應的vbc編譯器, jsc編譯器)把aspx文件編譯成dll,
◆然后ASP.NET再調(diào)用該dll來處理具體的客戶請 求,返回服務器響應。
從這個處理流程可以看出,一般情況下,ASP.NET運行環(huán)境會自動識別、檢查、更新與aspx相對應的 dll.那么有沒有其它辦法可以強制把對一個aspx文件的處理"路由"到一個已編譯存在的DLL呢?方法就是在ASP.NET應用程序配置文件 web.config的system.web節(jié)的httpHandlers節(jié)添加aspx到dll的映射項,語法如下:
- <add verb="*" path="aspx文件名" type="類名,dll文件" />
aspx文件:需要被"路由"的虛擬名稱,擴展名必須是aspx,否則IIS會先于ASP.NET運行環(huán)境處理該文件。
dll文件: dll文件(應用程序集)的名稱,不必輸入".dll".ASP.NET 首先在應用程序的專用 \bin 目錄中搜索程序集 DLL,然后在系統(tǒng)程序集緩存中搜索程序集 DLL.
類名: 由于一個dll可能會有多個名稱空間或多個類,因此必須指明當dll調(diào)用時自動加載哪個類。
例如,某一ASP.NET應用程序的web.config文件如下:
- <?xml version="1.0"?>
- <configuration>
- <system.web>
- <httpHandlers>
- <add verb="*" path="index.aspx" type="BBS.IndexPage, bbs" />
- </httpHandlers>
- </system.web>
- </configuration>
該配置文件告訴ASP.NET,在客戶端請求本應用程序的index.aspx文件時,直接調(diào)用應用程序bin目錄下的bbs.dll,并自動加載其中的BBS.IndexPage類。