日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Asp.Net页面生命周期(多图)

發布時間:2025/5/22 asp.net 128 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.Net页面生命周期(多图) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

抽空用viso畫了請求處理模型圖

?

1、瀏覽器實際上是一個Socket客戶端,它向服務器發送請求報文

2、請求報文被封裝為http請求,通過socket發送到IIS服務器

3、內核模式包含一個Http.SYS文件,它用來監聽端口,接收請求后將其發送到用戶模式。

4、用戶模式中IIS將請求發送到w3svc.exe進程中,

5、w3svc.exe將請求發到inetinfo.exe中。

6、inetinfo.exe截獲請求后,根據資源映射信息,將請求的資源分配到特定的處理程序模塊。

8、如果請求的是靜態資源(img、html等),則由IIS將本地文件內容輸出到瀏覽器。

7、如果是動態資源,則告訴w3svc.exe應該把請求傳到對應的擴展模塊中,如aspx請求會分配到aspnet_isapi.dll擴展程序中

9、aspnet_isapi.dll是一個擴展程序,實現了IIS內部的一些API,也是一種請求過濾的插件。它的作用是1.負責啟動托管環境。2.初始化托管環境。3.將請求分發給托管環境。也就是說,它負責啟動aspnet? Runtime創建aspnet運行環境,將請求交給ISAPIRuntime的PR方法。

10、aspnet_isapi.dll會將請求發到w3wp.exe中處理

在IIS中,工作進程(w3wp.exe)運行著ASP.NET應用程序,管理并響應所有的請求,ASP.NET所有的功能都運行在工作進程下,當請求到來時,工作進程會生成Request和Response相關的信息。簡而言之,工作進程就是ASP.NET程序的心臟。

11、然后在擴展模塊中調用ISAPIRuntime(ISAPIRuntime是進入.NET托管環境的入口)的ProcessRequest方法,,該方法要求傳入一個ecb句柄(ecb句柄指向請求報文的內存地址),將其創建為一個HttpWorkRequest對象。HttpWorkRequest只是對請求進行簡單的封裝。

?

12、將HttpWorkRequest對象放到HttpRuntime的ProcessRequest方法中,返回一個HttpContext上下文對象。

13、HttpContext上下文對象包含HttpRequest請求報文和HttpResponse響應報文

14、根據HttpApplication獲得一個HttpApplication對象的實例,獲取實例的時候,先去Application池中去找是否有空閑的HttpApplication對象,如果有則直接返回一個對象,不存在的話就就先編譯globle文件生成一個HttpApplication的派生類,通過反射創建一個HttpApplication實例并返回。并開始處理用戶的請求。

15、用戶的請求是通過觸發HttpApplication的19個事件23個步驟進行處理的。如果是一般處理程序(.ashx),那么執行完管道中的事件后按照原路進行返回。如果是aspx頁面那么就開始走頁面的生命周期了。

16、HttpApplication對HttpContext處理完成后,通過Socket返回響應報文

17、瀏覽器接收響應報文(解析Html并渲染Html標簽、CSS、JS)

下面是對管道的一些理解,圖是找來的,原圖有一些錯誤,已修正

?

頁面的生命周期發生在第11至12個事件。執行步驟如下

1、創建頁面控件樹BuilderControlTree:將C#創建控件的代碼封裝到FrameworkInitliaze() 方法中,在方法內部將aspx所有控件new一個實例,然后構造樹結構

2、判斷是否回發,如果ViewState為null,則不是回發,IsPostBack為false,如果有值,則為True。

3、初始化包括三個階段:PreInit()預初始化:Init()初始化:InitComplete()初始化完成.做的主要操作是創建控件ID,然后將所有控件的Page屬性指向當前頁面

4、加載ViewState處理回發數據,將數據放到控件中,將需要觸發事件的控件放到一個集合里面去。

5、預加載PreLoad,加載Load(Page_Load()),其實就是執行Page_Load里的代碼

6、第二次處理回發數據

7、觸發改變的事件和點擊事件

8、加載完成

9、預渲染OnPreRender:最后改變頁面狀態,保存對控件狀態做的更改

10、保存頁面狀態SavaViewState:自動將控件的ViewState屬性保持到字符串對象中,并放到隱藏域中發送到客戶端

11、渲染Render:

頁面生命周期結束后,繼續管道之后的事件。

了解頁面的生命周期,有助于我們在適當的事件中放入邏輯,而不是一味的將邏輯放到頁面加載Page_Load中。以下是從網上截的一張圖。

轉載于:https://www.cnblogs.com/CoderO3/archive/2013/04/15/3022672.html

總結

以上是生活随笔為你收集整理的Asp.Net页面生命周期(多图)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。