ASP.NET底層架構探索之進入ASP.NET

來源:互聯網
上載者:User
asp.net|架構   ASP.NET是一個非常強大的構建Web應用的平台,它提供了極大的靈活性和能力以致於可以用它來構建所有類型的Web應用。絕大多數的人只熟悉高層的架構如WebForms和WebServices-這些都在ASP.NET階層在最高層。在這篇文章中我將會討論ASP.NET的底層機制並解釋請求(request)是怎麼從Web伺服器傳送到ASP.NET運行時然後如何通過ASP.NET管道來處理請求。

  對我而言瞭解平台的內幕通常會帶來滿足感和舒適感,深入瞭解也能協助我寫出更好的應用。知道可以使用哪些工具以及他們是怎樣作為整個複雜架構的一部分來互相配合的可以更容易地找出最好的解決方案,更重要的是可以在出現問題時更好的解決它們。這篇文章的目標是從系統層級瞭解ASP.NET並協助理解請求(request)是如何在ASP.NET的處理管道中流轉的。同樣,我們會瞭解核心引擎和Web請求如何在那裡結束。這些資訊大部分並不是你在日常工作時必須瞭解的,但是它對於理解ASP.NET架構如何把請求路由到你的代碼(通常是非常高層的)中是非常有益的。

  不管怎麼樣,ASP.NET從更低的層次上提供了更多的靈活性。HTTP運行時和請求管道在構建WebForms和WebServices上提供了同樣的能力-它們事實上都是建立在。NETManaged 程式碼上的。而且所有這些同樣的功能對你也是可用的,你可用決定你是否需要建立一個比WebForms稍低一點層次的定製的平台。

  WebForms顯然是最簡單的構建絕大多數Web介面的方法,不過如果你是在建立自訂的內容處理器(handler),或者有在處理輸入輸出內容上有特殊的要求,或者你需要為另外的應用建立一個定製的應用程式服務介面,使用這些更低級的處理器(handler)或者模組(module)能提供更好的效能並能對實際請求處理提供更多的控制。在WebForms和WebServices這些高層實現提供它們那些能力的同時,它們也對請求增加了一些額外負擔,這些都是在更底層可以避免的。

  ASP.NET是什麼

  讓我們以一個簡單的定義開始:什麼是ASP.NET?我喜歡這樣定義ASP.NET:

  ASP.NET是一個複雜的使用Managed 程式碼來從頭到尾處理Web請求的引擎。

  它並不只是WebForms和WebServies…

  ASP.NET是一個請求處理引擎。它接收一個發送過來的請求,把它傳給內部的管道直到終點,作為一個開發人員的你可以在這裡附加一些代碼來處理請求。這個引擎是和HTTP/Web伺服器完全分隔的。事實上,HTTP運行時是一個組件,使你可以擺脫IIS或者任何其他的伺服器程式,將你自己的程式寄宿在內。例如,你可以將ASP.NET運行時寄宿在一個Windows form程式中(查看http://www.west-wind.com/presentations/aspnetruntime/aspnetruntime.asp可以得到更加詳細的資訊)

  運行時提供了一個複雜但同時非常優雅的在管道中路由請求的機制。其中有很多相關的對象,大多數都是可擴充的(通過繼承或者事件介面),在幾乎所有的處理流程上都是如此。所以這個架構具有高度可擴充性。通過這個機制,掛接到非常底層的介面(比如緩衝,認證和授權)都變得可能了。你甚至可以在預先處理或者處理後過濾內容,也可以簡單的將符合特殊標記的請求直接路由你的代碼或者另一個URL上。存在著許多不同的方法來完成同一件事,但是所有這些方法都是可以簡單直接地實現的,同時還提供了靈活性,可以得到最好的效能和開發的簡單性。

  整個ASP.NET引擎是完全建立在Managed 程式碼上的,所有的擴充功能也是通過Managed 程式碼擴充來提供的

  整個ASP.NET引擎是完全建立在Managed 程式碼上的,所有的擴充功能也是通過Managed 程式碼擴充來提供的。這是對。NET架構具有構建複雜而且高效的架構的能力的最好的證明。ASP.NET最令人印象深刻的地方是深思熟慮的設計,使得架構非常的容易使用,又能提供掛接到請求處理的幾乎所有部分的能力。

  通過ASP.NET你可以從事從前屬於ISAPI擴充和IIS過濾器領域的任務-有一些限制,但是比起ASP來說是好多了。ISAPI是一個底層的Win32風格的API,有著非常粗劣的介面而且難以用來開發複雜的程式。因為ISAPI非常底層,所以它非常的快,但是對於應用級的開發人員來說是十分難以管理的。所以,ISAPI通常用來提供橋接的介面,來對其他應用或者平台進行轉交。但是這並不意味者ISAPI將消亡。事實上,ASP.NET在微軟的平台上就是通過ISAPI擴充來和IIS進行互動的,這個擴充寄宿著。NET運行時和ASP.NET運行時。ISAPI提供了核心的介面,ASP.NET使用非託管的ISAPI代碼通過這個介面來從Web伺服器擷取請求,並發送響應回用戶端。ISAPI提供的內容可以通過通用對象(例如HttpRequest和HttpResponse)來擷取,這些對象通過一個定義良好並有很好訪問性的介面來暴露非管理的資料。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.