1. 程式人生 > >Asp.Net 學習筆記(IIS不同版本和Asp.Net)

Asp.Net 學習筆記(IIS不同版本和Asp.Net)

work rem 相同 出發 資源 iis 其中 筆記 http

 主要目的是在網上記錄一下學習筆記,如有不對,請指出 謝謝!! 

iis5.x:

  存在問題,inet info收到動態請求後,aspnt_isapi.dll會被加載到inetinfo.exe(掛載w3svc服務)這個進程中,與工作進程通過管道進行通信,存在性能瓶頸

所有的asp.net應用運行在相同進程(aspnet_wp.exe)進程的不同進程域,並不能完全隔絕各個進程的相互影響

Iis6.0

  將isapi動態鏈接庫直接加載到工作進程,不在掛載w3svc,還是有元數據庫(http請求解析出的數據去元數據庫對應web程序)

加入應用程序池概念,為一個多個web應用創建一個應用程序池,每一個對應獨立的工作進程w3wp.exe,提供進程級別的隔離機制

創建了http.sys的http監聽器,他以驅動程序的形式運行在Windows的內核模式,是tcp/ip網絡子系統的一部分,優點:始終處於運行狀態,對用戶的請求及時反映;穩定,運行在內核模式,不執行用戶代碼,不會受到其他影響;內核模式下數據緩存,頻繁請求某個資源,會緩存。

問題:w3svc的功能:http請求接受,接受http.sys監聽的http請求;配置管理,從metabase加載配置信息對相關組件配置;進程管理:創建、回收、監控工作進程

雙管道模式,asp.net和iis不是同一個管道,通過isapi

Iis7:

w3svc後兩組功能給了WAS,提供了對非http協議的支持。通過提取監聽接口抽象出不同監聽器,提供基於tcp、命名管道等傳輸協議支持。某種意義上來說,w3svc相當於http.sys的監聽適配器,三種非http監聽器和監聽適配器定義在程序集SMSvcHost.exe中,四個windows服務,其中一個是wcf的tcp端口共享

無論是w3svc的http請求還是WCF提供的監聽適配器接收到的其他協議的請求,最後都會被傳遞到WAS,在進行請求處理過程中通過內置配置管理模塊加載相關的配置信息

iis7完成兩個管道的集成

asp.net管道:

w3wp.exe會利用aspnet_isap.dll(包含isapi的定義)加載.net運行時,一個運行池可以承載一個或者多個web應用

HTTP請求處理:

http.sys監管接受到HTTP請求,經過w3svc判斷如果是動態請求某個web應用,W3wp.exe利用aspnet_isapi.dll加載.net運行時(如果運行時未加載)

然後,iis會通過app domain factory為該web應用創建應用程序域。,然後一個特殊的運行時isapiruntime(system.web.dll hosting)被加載,會接管該http請求。接管請求的isapiruntime會將請求封裝為isapiworkrequset對象,然後傳遞給asp.net運行時httpruntime,至此,http請求進入asp.net管道。

Httpruntime會根據isapiworkrequest對象創建用於表示當前http請求的Context(上下文)對象HTTP context。

創建完成後,HTTP runtime會利用HTTP application factory創建或獲取現有(asp.net維護者一個HTTP application對象池)的HTTP application對象,

在HTTP application初始化的時候,asp.net會根據配置文件加載並初始化註冊的HTTP module對象,

HTTP application處理http請求的不同階段會觸發不同的事件,

而HTTP module的意義是通過註冊HTTP application的相應事件,從而將所需要的操作(方法)註入到http處理的這個流程中,

最終完成HTTP請求的處理是在HTTP handler中,不同的HTTP請求對應不同的HTTP handle

HTTP application是整個asp.net的核心,一個對象在某個時刻只能處理一個http請求,所以采用對象池機制來創建或者獲取對象,第一個請求過來,會創建多個對象放入池中,選擇一個進行處理,處理完成不會被回收,釋放到池中,如果都處於繁忙,不超過最大數量可以創建再去處理,不然只能放到隊列中等待,處理HTTP請求相對復雜,不同階段會觸發相應的事件,。。。。。。。。

定制HTTP application:

Asp.net中的HTTP application派生於global.asax文件,按照Application_方法名

HTTPmodule:實現system.web.ihttpmodule接口 init實現自身初始化,接受一個HTTP application對象,配置HTTP handle 的方法,webconfig

可以在調用當前HTTP context的remaphandler方法,制定一個具體的HTTP handler對象,為了讓asp.net直接跳過默認的HTTP handler映射操作(在HTTP application的postmaprequesthandler事件出發之前)

Asp.net mvc就是通過擴展asp.net實現的,擴展點主要體現在HTTP module和HTTP handler,整個。。mvc自定義這兩個核心組件建立起來。

下一篇等學習完自建一個小型asp.net mvc框架之後再繼續討論。

Asp.Net 學習筆記(IIS不同版本和Asp.Net)