首先我們來談談Asp.net工作原理。
具體描述下這樣的:首先客戶請求WEB頁。然後WEB服務尋找指令檔(.aspx),而這時就是aspnet_isapi.dll這個動態連線庫來處理。接著Asp.net程式碼被傳送到公共語言執行時期進行編譯。接著HTML流返回給瀏覽器和命令。最後由瀏覽器處理HTML並顯示頁面。
什麼是ISAPI呢?
在Internet時代的開端,客戶端的需求非常有限;.htm檔案就可以滿足他們的需求。但是,隨著時間的流逝,客戶端需求的擴充超越了.htm檔案或靜態檔案所包含的功能。
開發者需要擴充或擴充Web伺服器的功能。 Web伺服器廠商設計了不同的解決方案,但是都遵循同一個主題向Web伺服器插入某些元件。所有的Web伺服器補充技術都允許開發者建立並插入元件以增強Web伺服器的功能。微軟公司提出了ISAPI(網路伺服器API),網景公司提出了NSAPI(網景伺服器API)等等。 ISAPI是一種重要的技術,它允許我們增強與ISAPI相容的Web伺服器(IIS就是一種與ISAPI相容的Web伺服器)的能力。我們使用下面的元件來達到這個目的:
1,ISAPI擴充:ISAPI擴充是使用Win32動態連結函式庫來實現的。你可以把ISAPI擴充視為一個普通的應用程式。 ISAPI擴充的處理目標是http請求。
2,ISAPI過濾器:客戶端每次向伺服器發出請求的時候,請求要經過過濾器。客戶端不需要在請求中指定過濾器,只需要簡單地把請求傳送給Web伺服器,接著Web伺服器把請求傳遞給相關的過濾器。接下來過濾器可能會修改請求,執行某些登入操作等等。
ASP.NET請求的處理過程:
ASP.NET請求處理過程是基於管道模型的,在模型中ASP.NET把http請求傳遞給管道中的所有模組。每個模組都接收http請求並有完全控制權限。模組可以用任何自認為適合的方式來處理請求。一旦請求經過了所有HTTP模組,就最終被HTTP處理程序處理。 HTTP處理程序對請求進行一些處理,並且結果將再次經過管道中HTTP模組。
ISAPI的篩選器:
IIS本身是不支援動態頁面的,也就是說它只支援靜態html頁面的內容,對於如.asp,.aspx,.cgi,.php等,IIS並不會處理這些標記,它就會把它當作文本,絲毫不做處理發送到客戶端。為了解決這個問題。 IIS有一種機制,叫做ISAPI的篩選器,它是一個標準元件(COM元件)。
Asp.net服務在註冊到IIS的時候,會把每個擴充可以處理的檔案副檔名註冊到IIS裡面(如:*.ascx、*.aspx等)。擴充啟動後,就根據定義好的方式來處理IIS所不能處理的文件,然後把控制權跳到專門處理代碼的進程中讓這個進程開始處理代碼,生成標準的HTML代碼,生成後把這些代碼加入原有的Html中,最後把完整的Html回傳給IIS,IIS再把內容傳送到客戶端。