.net軟件開發(fā) :ASP.NET底層架構探索之進入ASP.NET 來源:http://www./ArticleView/2007-1-15/Article_View_887.Htm ASP.NET是一個非常強大的構建Web應用的平臺,它提供了極大的靈活性和能力以致于可以用它來構建所有類型的Web應用。絕大多數(shù)的人只熟悉高層的框架如WebForms和WebServices-這些都在ASP.NET層次結構在最高層。在這篇文章中我將會討論ASP.NET的底層機制并解釋請求(request)是怎么從Web服務器傳送到ASP.NET運行時然后如何通過ASP.NET管道來處理請求。
不管怎么樣,ASP.NET從更低的層次上提供了更多的靈活性。HTTP運行時和請求管道在構建WebForms和WebServices上提供了同樣的能力-它們事實上都是建立在。NET托管代碼上的。而且所有這些同樣的功能對你也是可用的,你可用決定你是否需要建立一個比WebForms稍低一點層次的定制的平臺。 WebForms顯然是最簡單的構建絕大多數(shù)Web接口的方法,不過如果你是在建立自定義的內(nèi)容處理器(handler),或者有在處理輸入輸出內(nèi)容上有特殊的要求,或者你需要為另外的應用建立一個定制的應用程序服務接口,使用這些更低級的處理器(handler)或者模塊(module)能提供更好的性能并能對實際請求處理提供更多的控制。在WebForms和WebServices這些高層實現(xiàn)提供它們那些能力的同時,它們也對請求增加了一些額外負擔,這些都是在更底層可以避免的。 ASP.NET是什么 讓我們以一個簡單的定義開始:什么是ASP.NET?我喜歡這樣定義ASP.NET: ASP.NET是一個復雜的使用托管代碼來從頭到尾處理Web請求的引擎。 它并不只是WebForms和WebServies… ASP.NET是一個請求處理引擎。它接收一個發(fā)送過來的請求,把它傳給內(nèi)部的管道直到終點,作為一個開發(fā)人員的你可以在這里附加一些代碼來處理請求。這個引擎是和HTTP/Web服務器完全分隔的。事實上,HTTP運行時是一個組件,使你可以擺脫IIS或者任何其他的服務器程序,將你自己的程序寄宿在內(nèi)。例如,你可以將ASP.NET運行時寄宿在一個Windows form程序中(查看http://www./presentations/aspnetruntime/aspnetruntime.asp可以得到更加詳細的信息) 運行時提供了一個復雜但同時非常優(yōu)雅的在管道中路由請求的機制。其中有很多相關的對象,大多數(shù)都是可擴展的(通過繼承或者事件接口),在幾乎所有的處理流程上都是如此。所以這個框架具有高度可擴展性。通過這個機制,掛接到非常底層的接口(比如緩存,認證和授權)都變得可能了。你甚至可以在預處理或者處理后過濾內(nèi)容,也可以簡單的將符合特殊標記的請求直接路由你的代碼或者另一個URL上。存在著許多不同的方法來完成同一件事,但是所有這些方法都是可以簡單直接地實現(xiàn)的,同時還提供了靈活性,可以得到最好的性能和開發(fā)的簡單性。 整個ASP.NET引擎是完全建立在托管代碼上的,所有的擴展功能也是通過托管代碼擴展來提供的 整個ASP.NET引擎是完全建立在托管代碼上的,所有的擴展功能也是通過托管代碼擴展來提供的。這是對。NET框架具有構建復雜而且高效的框架的能力的最好的證明。ASP.NET最令人印象深刻的地方是深思熟慮的設計,使得框架非常的容易使用,又能提供掛接到請求處理的幾乎所有部分的能力。 通過ASP.NET你可以從事從前屬于ISAPI擴展和IIS過濾器領域的任務-有一些限制,但是比起ASP來說是好多了。ISAPI是一個底層的Win32風格的API,有著非常粗劣的接口而且難以用來開發(fā)復雜的程序。因為ISAPI非常底層,所以它非常的快,但是對于應用級的開發(fā)者來說是十分難以管理的。所以,ISAPI通常用來提供橋接的接口,來對其他應用或者平臺進行轉交。但是這并不意味者ISAPI將消亡。事實上,ASP.NET在微軟的平臺上就是通過ISAPI擴展來和IIS進行交互的,這個擴展寄宿著。NET運行時和ASP.NET運行時。ISAPI提供了核心的接口,ASP.NET使用非托管的ISAPI代碼通過這個接口來從Web服務器獲取請求,并發(fā)送響應回客戶端。ISAPI提供的內(nèi)容可以通過通用對象(例如HttpRequest和HttpResponse)來獲取,這些對象通過一個定義良好并有很好訪問性的接口來暴露非托管數(shù)據(jù)。 |
|