iis6.0與asp.net的運行原理

来源:http://www.cnblogs.com/cheesebar/archive/2016/12/10/6154666.html
-Advertisement-
Play Games

這幾天上網翻閱了不少前輩們的關於iis和asp.net運行原理的博客,學的有點零零散散,花了好長時間做了一個小結(雖然文字不多,但也花了不少時間呢),鄙人不才,難免有理解不道的地方,還望前輩們不吝賜教。 這篇博客主要是描述asp.net程式在iis6.0上的一個執行過程。 執行過程圖: 組件描述 H ...


  這幾天上網翻閱了不少前輩們的關於iis和asp.net運行原理的博客,學的有點零零散散,花了好長時間做了一個小結(雖然文字不多,但也花了不少時間呢),鄙人不才,難免有理解不道的地方,還望前輩們不吝賜教。

  這篇博客主要是描述asp.net程式在iis6.0上的一個執行過程。

  執行過程圖:

 

組件描述

  HTTP.SYS:

    Win2003winXP SP2的核心操作系統組件,,能夠讓任何應用程式通過它提供的介面,以http協議進行信息通訊。

  優點:

  1. 緩存-靜態的內容被緩存於內核模式下,這使服務響應速度更快
  2. 記錄(Log-IISLOG功能更快且標準化
  3. 帶寬控制
  4. 可靠性-所有的服務請求會在Http.sys里暫存入隊列,而不是由服務程式本身來處理,這樣,即使服務程式重啟,尚未被處理的請求也不會丟失了
  5. 埠重用現在,只要是通過Http.sys管理的埠(基本包括了那些著名的埠,比如80),都可以同時允許多個程式同時監聽了。

  簡單來說它是獨立於IIS之外的,任何http請求都會首先被它偵聽到

  W3SVC:

       1. 沒有第三方應用程式的代碼

       2. 根據配置數據的設置創建和監視w3wp.exe,由工作線程運行Web網站應用。

       3. 總是處於運行狀態,因此它能夠監視Web應用的健康狀況,併在必要時採取行動。由於這一策略,伺服器能夠根據用戶指定的參數監視和重新啟動應用程式。

  Application Pool(應用程式池):

       1. IIS6.0中,每一個用戶web應用程式都會運行在一個應用程式池中。這個應用程式池可以是IIS預設的應用程式池,也可以是用戶自定義的應用程式池。

       2.作為一個宿主程式,每個應用程式池中都會運行著一個或者多個用戶web應用程式。

       3.在應用程式池中,存在著一個或者多個工作進程(一個以上叫Web)。每個工作進程只能屬於一個特定的應用程式池,由這些工作進程來負責管理應用程式池中的用戶web應用程式。

  w3wp.exe(工作進程):

  預設情況下,IIS 6.0在工作進程隔離模式下運行,在這種模式中,對於每一個Web應用,IIS 6.0都用一個獨立的w3wp.exe的實例來運行它。 因此,工作進程隔離模式不存在          進程內(In-Process)應用程式存在的問題,有效地提高了可靠性和安全性。可靠性的提高是因為一個Web應用的故障不會影響到其他Web應用,也不會影響http.sys,每一        個Web應用由W3SVC單獨地監視其健康狀況。安全性的提高是由於應用程式不再象IIS 5.0和IIS4.0的進程內應用那樣用System帳戶運行,預設情況下,w3wp.exe的所有        實例都在一個許可權有限的“網路服務”帳戶下運行,必要時,還可以將工作進程配置成用其他用戶帳戶運行。

  Metabase(元數據):

  1. 保存配置數據
  2. 有一個map保存應用程式池和工作進程的數據  

執行過程

  1. 在客戶端(一般指瀏覽器)輸入一個http://www.***.com/default.aspx/
  2. HTTP.SYS首先偵聽到請求(靜態文件緩存於內核模式下)
  3. W3SVC接收請求,判斷是否是靜態文件,靜態文件直接響應,否則將請求轉發給應用程式池的請求隊列,從元數據(通過WAS)中查找應用程式池數據,沒有則創建
  4. WAS請求傳遞給應用程式池對應的工作進程,沒有就創建(創建時載入ISAPI)
  5. ISAPI會根據ECH創建一個HttpWorkerRequest
  6. 接下來進入應用程式域,由非托管代碼變為托管代碼(CLR)
  7. HttpRuntime執行ProcessRequest方法產生HttpContext
  8. HttpApplicationFactory執行GetApplicationInstance方法產生HttpApplication
  9. HttpApplication執行一系列事件

Application暴露出的事件

  1.BeginRequest:asp.net開始處理請求的第一個事件,表示處理的開始。

2.AuthenticateRequest:驗證請求,一般用來取得請求的用戶信息。

3.PostAuthenticateRequest:已經獲取請求的用戶信息。

4.AuthorizeRequest:授權,一般用來檢查用戶的請求是否獲得許可權。

5.PostAuthorizeRequest:用戶請求已經獲得授權。

6.ResolveRequestCache:獲取以前處理緩存的處理結果,如果以前緩存過,那麼,不用再進行請求的處理工作,直接返回緩存的結果。

7.PostResolveRequestCache:已經完成緩存的處理工作。

8.PostMapRequestHandler:已經根據用戶的請求,創建了請求的處理器對象。

9.AcquireRequestState:取得請求的狀態,一般用於session

10.PostAcquireRequestState:已經獲得了session

11.PreRequestHandlerExecute:準備執行處理程式。

12.PostRequestHandlerExecute:已經執行了處理程式

13.ReleaseRequestState:釋放請求的狀態。

14.PostReleaseRequestState:已經釋放了請求的狀態。

15.UpdateRequestCache:更新緩存。

16.PostUpdateRequestCache:已經更新了緩存。

17.LogRequest:請求的日誌操作

18.PostLogRequest:已經完成請求的日誌操作。

19.EndRequest:本次請求處理完成。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • string 與 String,大 S 與小 S 之間有關字元串的秘密 字元串是 String 類型的對象,它的值是文本。 在內部,文本被存儲為 Char 對象的順序只讀集合。 C# 字元串末尾沒有以 null 結尾的字元;因此 C# 字元串可以包含任意數目的嵌入式 null 字元(“\0”)。 字 ...
  • 最近在熟悉Abp框架,其基於DDD領域驅動設計。。。前段可以繞過mvc直接調用根據app層動態生成的webapi,有點神奇~,Web API之前有簡單接觸過,WCF的輕量級版,一般用於做一寫開發性的服務介面,形式上類似與MVC,只是不渲染視圖(其他基於restful設計什麼的我不想去扯)。 因此我的 ...
  • C# 介面(Interface) 介面定義了所有類繼承介面時應遵循的語法合同。介面定義了語法合同 "是什麼" 部分,派生類定義了語法合同 "怎麼做" 部分。 介面定義了屬性、方法和事件,這些都是介面的成員。介面只包含了成員的聲明。成員的定義是派生類的責任。介面提供了派生類應遵循的標準結構。 抽象類在 ...
  • 系統中經常會使用導出Excel的功能。 之前使用的是NPOI,但是導出數據行數多就報記憶體溢出。 最近看到EPPlus可以用來導出Excel,就自己測了下兩者導出上的差異。 NPIO官網地址:http://npoi.codeplex.com/ EPPlus官網地址:http://epplus.code ...
  • 文章作者 Julie Lerman 是 Microsoft MVP、.NET 導師和顧問,住在佛蒙特州的山區。您可以在全球的用戶組和會議中看到她對數據訪問和其他 .NET 主題的演示。她的博客地址是 [thedatafarm.com/blog][1]。她是“ Entity Framework 編程 ...
  • 【博主】反骨仔 【出處】http://www.cnblogs.com/liqingwen/p/6155694.html ...
  • IIS7.0 IIS7.0主要引入了WAS(Windows Process Activation,不同於6.0中的Web Admin Service),分擔了原來w3svc的部分功能,同時為IIS7.0提供了非HTTP協協議的支持,通過適配器介面(Listener Adapter Interface ...
  • Ext.NET 4.1 系統框架的搭建(後臺) 附源碼 代碼運行環境:.net 4.5 VS2013 (代碼可直接編譯運行) 預覽圖: 分析圖: 上面系統的構建包括三塊區域:North、West和Center: North負責顯示系統信息,包括系統圖片、當前時間、登錄信息、退出登錄等功能。 West ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...