ASP.NET初探:什么是ASP.NET
ASP.NET是一個用于構建Web程序的強大平臺,提供了巨大的彈性和能力以至于它可以構建任意的Web程序。許多人僅僅對處于ASP.NET高層次的框架如:WebForms和WebServices比較熟悉,因此,在這篇文章里,我將會闡述有關ASP.NET比較底層的知識,介紹什么是ASP.NET,并且將會解釋,如何將請求從Web Server移交給ASP.NET運行時,然后通過ASP.NET HTTP管道處理這些請求。
了解一個平臺的內部工作機制總是會讓人感到一些滿足和安慰,深入了解也能幫助寫出更好的程序。知道了工具有什么用途,以及它們如何組裝成復雜框架的一部分,這些將會使你很容易的找到問題的解決方案,以及在修改和調試錯誤時,都顯得非常重要。這篇文章的目的就是從底層了解ASP.NET以及幫助你理解請求如何流入ASP.NET處理管道里。同時,將會了解ASP.NET引擎的核心,以及一個Web請求如何在這里結束。這里講到的許多知識都是你日常工作中沒必要知道的,但是,如果理解了ASP.NET如何把請求路由到應用程序的代碼里(通常比較高層次的),這將非常有用。
注意:整個ASP.NET引擎完全構建在托管代碼里,其所有的擴展性都是通過托管代碼去構建。
使用ASP.NET的大多數人都比較熟悉WebForms和WebServices。這些高層次的實現,使得構建Web程序變得非常容易。ASP.NET被設計為驅動引擎,它把底層的接口提供給Web Server,為高層次Web應用程序的前端和末端提供了路由服務。WebForms和WebServices是建立在ASP.NET框架之上,有關HTTP處理的兩種最常用的方式。
其實,在較低的層次上,ASP.NET也提供了足夠多的靈活性。HTTP運行時和請求管道提供了同樣的能力,可以構建類似于WebForms和WebServices的實現,當然,這些已經使用.NET托管代碼實現了。如果需要構建一個自定義HTTP處理平臺,而這個平臺要比WebForms所處的層次低一點,那么就會用到所有這些類似的功能。
構建大多的Web界面,使用WebForms無疑是最容易的方法,但是,如果想自定義一個內容處理器,或者需要對流入和流出的內容做特殊的處理,或者需要為一個應用程序定制一個應用服務器接口,那么使用這些低層次的處理或者模塊將會得到更好的性能,以及可以在真正的請求處理中獲得更多的控制權。盡管那些高層次的實現,如:WebForms和WebServices已提供了類似的功能,但由于它們針對請求添加了太多的控制(導致性能下降)。所以完全可以另辟佳境,在較低層次上處理這些請求。
什么是ASP.NET?
讓我們從最簡單的定義開始,什么是ASP.NET?我通常喜歡用如下語句來描述ASP.NET。ASP.NET是完全使用托管代碼處理Web請求的一個成熟引擎平臺。它不僅僅只是WebForms和WebServices。
ASP.NET是一個請求處理引擎。它獲取客戶端請求,然后通過它內置的管道,把請求傳到一個終點,在這個終點,開發者可以添加處理這個請求的邏輯代碼。實際上這個引擎和HTTP或者Web Server是完全分開的。事實上,HTTP運行時是一個組件,你可以把它宿主在IIS之外的應用程序上。甚至完全可以和其它的服務組合在一起。例如可以把HTTP運行時宿主在Windows桌面應用程序里。
通過使用內置的管道路由請求,HTTP運行時提供了一套復雜的,但卻很優雅的機制。在處理請求的每一個層面都牽涉到許多對象,但大多數對象都可以通過派生或者事件接口來擴展。所以,此框架具有非常高的可擴展性。通過這一套機制,可以進入較低層次的接口如:緩存,身份驗證,授權等是有可能的。你可以在處理請求之前或之后過濾內容,或者僅僅把匹配指定簽名的客戶端請求直接路由到你的代碼里或轉向其它的URL。針對同一件事情,可以通過不同的處理方法完成,而且實現代碼都非常的直觀。除此之外,在容易開發和性能之間,HTTP運行時還提供了最佳的靈活性。
整個ASP.NET引擎完全構建在托管代碼里,所有的擴展性功能都是通過托管代碼的擴展提供。對于功能強大的.NET框架而言,使用自己的東西,構建一個成熟的、高性能的引擎體系結構已經成為一個遺囑。盡管如此,但重要的是,ASP.NET給人印象最深的是高瞻遠矚的設計,這使得在其之上的工作變得非常容易,并且提供了幾乎可以鉤住請求處理當中任意部分的能力。
使用ASP.NET可以完成一些任務,之前這些任務是使用IIS上的ISAPI擴展和過濾來完成的。盡管還有一些限制,但與ASP相比,已經有了很大的進步。ISAPI是底層Win32樣式的API,僅它的接口就有1MB,這對于大型的程序開發是非常困難的。由于ISAPI是底層的接口,因此它的速度也是非常的快。但對于企業級的程序開發是相當的難于管理的。所以,在一定的時間內,ISAPI主要充當其它應用程序或平臺的橋接口。但是無論如何,ISAPI沒有被廢棄。事實上,微軟平臺上的ASP.NET和IIS的接口是通過宿主在.NET里的ISAPI擴展來通信的,然后直達ASP.NET運行時。ISAPI提供了與Web Server通信的核心接口,然后ASP.NET使用非托管代碼獲取請求以及對客戶端請求發出響應。ISAPI提供的內容經由公共對象類似于HttpRequest和HttpResponse,通過一個設計優良的、可訪問的接口,以托管對象的方式暴露非托管數據。
【編輯推薦】