圖解DotNet架構之八:ASP.NET

來源:互聯網
上載者:User

     (聲明:本系列只想給大家介紹.net架構,並不是文法和類的使用的講解,所以只能概括的描述一下所提到的類,如果有疑問可以到MSDN上面去查)              

         

           當伺服器(ASP.NET)接收到一個 Http請求的時候,他會如何工作呢?

 

還是老思路,我們先來看圖:

 

 

這個圖和上一篇中的圖,基本上是一樣的(為了便於學習和記憶,我將一些不太重要的東西去掉了).

那麼我們現在來分析一下ASP.NET的運行過程吧。

 

 

首先從第一個方塊說起:啟動IIS進程,對於IIS來說,它依賴一個叫做 HTTP.SYS 的內建驅動程式來監聽來自外部的 HTTP請求。在作業系統啟動的時候,IIS首先在HTTP.SYS中註冊自己的虛擬路徑。實際上相當於告訴HTTP.SYS哪些URL是可以訪問的,哪些是不可以訪問的。
 

第二個方塊:在CLR挑選好了要載入Mscorewk.dll還是Mscorsvr.dll以後,就要載入MScorlib.dll和對應的工作者進程(如果請求的是一個可訪問的URL),HTTP.SYS會將這個請求交給 IIS 工作者進程。IIS6.0是w3wq.exe,IIS5.0是aspnet_wp.exe,每個工作者進程都有一個身份標識.

 

第三個方塊:編譯好機器碼以後,就可以執行指令了,這裡會建立Systemdomain,它包含了SharedDomain和預設的應用程式定義域,也就是當前應用程式自己的域,前面我們說過一個.net進程中可以包含多個預設的應用程式定義域,而這些應用程式定義域都會用到mscorlib.dll,如果每個預設的應用程式定義域中都去載入它,那麼無疑會造成記憶體的浪費,所以就有了SharedDomain,它是用來放所有Domain都要用到的Dll,這樣就避免了浪費記憶體.也最佳化了載入的速度.

 

第四個方塊:這時候預設的應用程式定義域,就會去找到Aspnet_wp.exe中的Main方法.

 

OK明白了ASP.NET的啟動過程,我們來看看AppDomain都做了什麼,還是來看圖:

 

 

 

1. HttpRuntime將Http請求轉交給 HttpApplicationFactory,由他將Global.asax與編譯好的Webapplication.dll中的Global.aszx.cs編譯產生HttpApplication,HttpApplication代表著我們建立的Web應用程式。HttpApplication建立針對此Http請求的 HttpContext對象,這個對象包含了關於此請求的諸多其他對象,主要是HttpRequest、HttpResponse、HttpSessionState等。這些對象在程式中可以通過Page類或者Context類進行訪問。
 
2. HttpApplication根據Web.config載入一系列Module,如sessionstate Module 就可以攔截Application_BeginRequest來處理Session.並且HttpApplication會獲得Httphandler,並且編譯請求的aspx頁面.

3. Http請求經過所有的Module之後,它會被HttpHandler處理。,通常也就是.aspx.cs檔案所完成的邏輯。我們知道.aspx 頁面繼承自Page類,Page類實現了IHttpHandler介面,HttpHandler也是Http請求處理的最底層。

4.HttpHandler處理完以後,Http請求再一次回到Module,此時Module可以做一些某個工作已經完成了之後的事情。Asp.Net 中有眾多的 XXing 、XXed 之類成對的事件,這裡就是為什麼Asp.Net可以將一個XX操作分成前後兩部分,然後再分別進行事件攔截的幕後原理。

下面我們來看看構建一個ASP.NET應用程式最常用的類的階層.

 

 

 

我們所用到的大部分<asp:XXX>的控制項,全部繼承自WebControl,而最基本HTML元素則繼承自HtmlControl.而.aspx 頁面繼承自Page類.

MS在ASP.NET的頁面採用的方式和Winform差不多,也是Composite的方式,具體的參見 圖解DotNet架構之七:Winform ,這裡不再贅述.

 

               下一篇:圖解DotNet架構之九:WPF  

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.