Asp.NET學習第二篇

來源:互聯網
上載者:User

前一天學習了http協議,簡單的socket編程,昨日就開始進入正式的asp.net學習,第一階段入門的學習大致上分成了5個階段,分別如下:

  1. 一般處理常式,html控制項,與.net內部對象,目標:知道ASP.NET的運行機制原理,對幾個asp.net核心對象有個初步的瞭解
  2. webform aspx:控制項樹,頁碼產生等
  3. ajax:理解ajax實現機制
  4. webform伺服器控制項:沒啥好說的
  5. asp.net高階內容:緩衝/母板頁/錯誤頁/靜態頁/網站部署/頁面生命週期/httpmoudle/url重寫等  

昨天開始進入入門階段第1階段的學習,由於前天自己做了個web伺服器(上篇部落格中類比了瀏覽器與伺服器之間的交流),已經瞭解了整個初步的流程,所以學習一般處理常式就不是什麼問題.下面看一個小小的DEMO:首先建立一個登陸的html頁面和一個一般處理常式:

<form action="Login.ashx" method="GET">
<input type="text" name="UserName " value=""/>
<input type="text" name="PassWord" value="" />
<input type="submit" name="submit" value="submit" />
</form>

當我們輸入使用者名稱跟密碼,提交給一般處理常式幫我們處理:

public void ProcessRequest(HttpContext context)
{
//指定輸出格式
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
context.Response.Write(context.Request.QueryString["name"]+"歡迎您....");
}

當然一般程式處理需要大量輸出html時還是非常不方便,需要拼接html代碼,用起來不方便,這裡我就不示範了,當然處理檔案,圖片還是非常好用,以至於出現了webform,完全可以把前台頁面看成一個模板(用過codesmith的人都知道模板,裡面有<% %>可以寫C#代碼),前台頁面繼承後台,所以後台頁面類的一些東西可以加到前台去,幕後處理完,前台就跟著變,這樣就不需要輸入大量的html代碼,我暫且把webform的前台頁面看成一個模板.ok不說webform.

當我們輸入登入名稱跟密碼後提交按鈕,瀏覽器幫我們做了什麼,伺服器又是怎麼接收到這些資料的?我們看似非常的簡單,瀏覽器幫請求封裝成http請求,然後通過socket發送到伺服器,服務交給一般處理常式處理,其實其中經過大量了處理,下面我們來看看詳細的處理過程.

Client-----HTTP.SYS--IIS-----W3SVC服務-----INetInfo.exe---asp.net_Isapi----W3WP.EXE----ISAPIRuntime------httpRuntime-----httpapplication

當用戶端發送請求通過socket到達web伺服器,首先到達一個核心模組Http.SYS,它的職責主要解析當前請求的協議以及連接埠,另外就是分發當前請求給處理http請求程式,然後到達我們熟悉的IIS伺服器,W3SVC服務的INETINFO.EXE會分析進程裡面的中繼資料,如果是靜態頁面等就直接處理,如果是ashx,aspx等就會交給asp.net_isapi,這是個com程式c++寫的負責net運行時啟動,並負責將http請求交給asp.net運行時...這個dll是非常重要,可以算是橋樑.然後到達isapiRuntime,會調用processReuquest方法,下面簡稱pr方法,通過ecb一個控制代碼擷取到IIS的請求報文,然後建立一個httpworkrequest對象,裡面封裝了我們發送給的請求---再然後到httpruntime,它也有pr的方法,把httpworkrequest再封裝撐httpcontext,其中就包含httprequest跟httpresponse,httpapplication是通過工廠反射出來的,其中有個httpapplication應用池,然後httpapplication有23個事件,其中19個公開的,,在第8個事件建立我們的handerl執行個體,在11跟12事件之間調用handerl執行個體的pr方法.這樣一個一般處理常式差不多就結束了,事件結束後,就按原路返回給用戶端.我感覺如果我們要看裡面的源碼等httpruntime 是個入口.我們可以用反編譯工具看看裡面到底是怎麼寫的.

說了這麼多,我們能學到什麼呢,知道這些又有什麼用呢,我想不懂得asp.net運行機制的,出了問題你都不知道在哪邊,關鍵我們還能學到思想,在那請求管道23個事件中我們可以進行擴充,通過httpmodule等,本身httpapplication自己就註冊了這些事件,可以把httpmodule看成過濾器,這種外掛程式機制我們可以學學,如果有能力可以用到我們以後的項目當中去.下面是一張圖裡面是大概的流程,此圖還不是很詳細,推薦大家去看個部落格寫的挺不錯的 http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp有些資料也是從這裡面學習到的,由於剛剛接觸asp.net很多地方寫的不好,可能有錯誤,請大家指出錯誤~

 

 

聯繫我們

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