熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 10:24:42  來源: .NET編程 

  ASPNET是一個非常強大的構建Web應用的平台它提供了極大的靈活性和能力以致於可以用它來構建所有類型的Web應用絕大多數的人只熟悉高層的框架如WebForms和WebServices這些都在ASPNET層次結構在最高層在這篇文章中我將會討論ASPNET的底層機制並解釋請求(request)是怎麼從Web服務器傳送到ASPNET運行時然後如何通過ASPNET管道來處理請求

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

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

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

  ASPNET是什麼

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

  ASPNET是一個復雜的使用托管代碼來從頭到尾處理Web請求的引擎

  它並不只是WebForms和WebServies…

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

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

  整個ASPNET引擎是完全建立在托管代碼上的所有的擴展功能也是通過托管代碼擴展來提供的

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

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


From:http://tw.wingwit.com/Article/program/net/201311/13525.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.