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

  這幾天上網翻閱了不少前輩們的關于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:本次請求處理完成。

轉載于:https://www.cnblogs.com/cheesebar/p/6154666.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456748.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456748.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

元類--用不上的先了解

元類 1. 類也是對象 在大多數編程語言中,類就是一組用來描述如何生成一個對象的代碼段。在Python中這一點仍然成立: >>> class ObjectCreator(object): … pass … >>> my_object ObjectCreator() >>> print(my_ob…

Android學習筆記進階十之Matrix錯切變換

剛開始我也不懂啥叫錯切變換,一看效果圖你就恍然大悟。 對圖像的錯切變換做個總結: x x0 b*y0; y d*x0 y0; 與之對應的方法是: [java] view plaincopyMatrix matrix new Matrix(); matrix.setSkew(0.0f, 0.5f);

SQL數據庫實戰(含建表數據和查詢案例)

Oracle數據庫安裝的時候會自帶一個練習用數據庫(其中包含employee表,后來版本中此表改名為emp); 首先在安裝過程中應該有個選項“是否安裝實例表”(完全安裝模式下默認是選擇的),需要選擇才有此…

Django中的核心思想ORM---元類實現ORM

1. ORM是什么 ORM 是 python編程語言后端web框架 Django的核心思想,“Object Relational Mapping”,即對象-關系映射,簡稱ORM。 一個句話理解就是:創建一個實例對象,用創建它的類名當做數據表名,用創建它…

移動互聯網廣告 - 第十更 - 廣告投放運營 DashBoard - 2016/12/10

廣告投放運營 DashBoard設計 移動互聯網互聯網廣告投放,數據監控DashBoard,基礎樣例示意,下圖僅供參考(來自于互聯網)。 轉載于:https://www.cnblogs.com/pythonMLer/p/6154700.html

微信小程序中使用emoji表情相關說明

2019獨角獸企業重金招聘Python工程師標準>>> 本帖將聚合一些跟emoji表情有關的知識;相關文章:“i愛記賬” 小程序后端開發小結 第7條經驗前端傳過來的昵稱和備注信息一定要經過嚴格的正則表達式過濾,放置出現XSS等攻擊&#xff0c…

java.lang.IllegalArgumentException: Does not contain a valid host:port authority: ignorethis

執行Hive語句運行MapReduce程序時突然出現這樣的異常: Total MapReduce jobs 1 Launching Job 1 out of 1 Number of reduce tasks not specified. Estimated from input data size: 1 In order to change the average load for a reducer (in bytes):set hive.ex…

Oracle基礎語句

1、創建表create table IT_EMPLOYEES(ENPLOYEES_ID NUMBER(6) NOT NULL UNIQUE,FIRST_NAME VARCHAR2(20),LAST_NAME VARCHAR2(25) NOT NULL,EMAIL VARCHAR2(25),PHONE_NUMBER VARCHAR2(20),JOB_ID VARCHAR2(10),SALARY NUMBER(8,2),MANAGER_ID NUMBER(6));2、--創建索引&#x…

Linux三劍客之grep 與 egrep

grep:Linux上文本處理三劍客1 grep:文本過濾(模式:pattern)工具; *(grep, egrep, fgrep) 2 sed:stream editor,文本編輯工具; 3 awk:Linux上的實現gawk,文本報…

WSGI直觀形象的了解一下

1. 瀏覽器請求動態頁面過程 2. WSGI 怎么在你剛建立的Web服務器上運行一個Django應用和Flask應用,如何不做任何改變而適應不同的web架構呢? 在以前,選擇 Python web 架構會受制于可用的web服務器,反之亦然。如果架構和服務器可以…

安裝Hbase(分布式)遇到一些問題及解決方法

問題一:安裝完成后在Hbase shell 命令行執行list命令時,爆出如下錯誤: hbase(main):001:0> list TABLE …

安裝MySql卡在Start Service的問題

我的情況:之前在windows下安裝過5.6版本,卸載后,現在安裝5.7版本,然后卡在Start Service這里,log日志沒報任何錯誤,后來經過不斷的嘗試各種網上的辦法終于把問題解決了。 問題的原因就是當初卸載5.6版本時…

學習進度條11

第十三周 日期 星期一 星期二 星期三 星期四 星期五 星期六 所花時間(包括上課) 19:10-22:20 (編程河北省科技信息通用調查系統) 8:00-10:00 (上課) 18:30-21:00 (Oracle實驗) 14:00-16:30 (編程河北省科技信息通用調查系統) 18:20-22:30 (編…

Python面向切面編程是什么

簡而言之就是裝飾器 https://blog.csdn.net/qq_41856814/article/details/90146293

hibernate實現多變聯合查詢

Hibernate主要支持兩種查詢方式:HQL查詢和Criteria查詢。前者應用較為廣發,后者也只是調用封裝好的接口。 現在有一個問題,就是實現多表連接查詢,且查詢結果集不與任何一個實體類對應,怎么解決呢? 舉個例子…

PyCharm光標變粗的解決辦法

pycharm中光標變粗,如下: 此時變成了改寫模式,只需要按下鍵盤的insert鍵即可 轉載于:https://www.cnblogs.com/uglyliu/p/6159839.html

SparkRDD常用算子實踐(附運行效果圖)

目錄1、簡單算子說明2、復雜算子說明 目錄 SparkRDD算子分為兩類:Transformation與Action. Transformation:即延遲加載數據,Transformation會記錄元數據信息,當計算任務觸發Action時,才會真正開始計算。 Action&am…

six庫是什么

Utilities for writing code that runs on Python 2 and 3”“” 它是一個專門用來兼容 Python 2 和 Python 3 的庫。它解決了諸如 urllib 的部分方法不兼容, str 和 bytes 類型不兼容等“知名”問題。

Kali-linux使用Nessus

Nessus號稱是世界上最流行的漏洞掃描程序,全世界有超過75000個組織在使用它。該工具提供完整的電腦漏洞掃描服務,并隨時更新其漏洞數據庫。Nessus不同于傳統的漏洞掃描軟件,Nessus可同時在本機或遠端上遙控,進行系統的漏洞分析掃描…

HDFS讀寫數據的原理

目錄1 概述2 HDFS寫數據流程3 HDFS讀數據流程 目錄 最近由于要準備面試,就把之前學過的東西好好整理下,權當是復習。 下面說下HDFS讀寫數據的原理。 1 概述 HDFS集群分為兩大角色:NameNode、DataNode NameNode負責管理整個文件系統的元數…