三十篇文章架構基本遵循:
前言:前情提要,閱讀此文建議使用工具或知識.選擇這個主題主要原因是
Http請求IIS Server,進入CLR前置動作),asp.net mvc源始碼解析文章中會盡量寫出我看到精華部分,但此系列文可能對於MVC新手不太容易閱讀,因為MVC框架中運用到許多設計模式和OOP觀念(當初我在閱讀上也花了不少功夫)
個人覺得OOP有很重要一個點是盡量用物件和物件關聯,資料狀態轉移來了解程式碼.
簡白來說就是物件關聯和關係
我希望大家閱讀完所有文章後可以獲得
Asp.net基於.NET Framework框架所提供,開發Web應用程式的類別庫,封裝在System.Web.dll檔案中,提供使用者開發網頁,ASP.NET運行在安裝了.NET Framework的IIS(Internet Information Services)伺服器上
微軟大大近幾年也投入開源行列讓我們可以更方便來窺探,Asp.net運作原理. 這個連結 Reference Source 可以查看微軟核心的DLL程式碼(這個網站是我們第一階段追code的好朋友)
Asp.net程式基本上是由IIS進行託管,介紹Asp.net MVC源始碼之前我們需要先了解Asp.net和IIS關係.
此篇同步發布在筆者Blog(開賽)Http 請求 Asp.net IIS伺服器架構 (第1天)
Web基於Http協定,它是一個無狀態協定,每次請求都是新的且不會紀錄之前請求的東西
下圖我畫出一個對於IIS請求基本會跑的流程圖.

基本分為兩個區塊
IIS Server領域
Http.sys的程式在監聽所有Http請求並交由W3WP.exe並透過aspnet_isapi來此次請求是否為靜態檔案..Net CLR領域由幾塊核心程式完成請求
之後會陸續介紹他們.
.Net CLR執行返回結果.如何辨別是否為靜態檔案,就需要談談HttpHandler的註冊表(後面有文章會說到)
基本上如果是請求Html,css,js...都會直接回傳不會在經過.Net CLR
Asp.net所有應用程式都離不開兩個核心模組Httpmodule & Httphandler且最終會找到一個繼承於IHttpHanlder物件來處理請求.
在網路上看到一個很好地比喻HttpModule & HttpHandler
Http請求像是一個旅客身上帶著行李拿著票來搭火車.
HttpHandler 是火車的終點站.HttpModule 是火車中途停靠的各站.這個比喻可以很清楚知道每個請求透過CLR就是要找到一個HttpHandler來執行.
![]()
當IIS在執行處理Http請求時工作管理員有一個w3wp應用程式在監聽.
此應用程式會依照aspnet_isapi模組來判斷此次請求是否走入.net CLR
今天我們了解到
Http.sys程式在監聽所有Http請求w3wp.exe初步過濾判斷如何執行此請求.瀏覽器發出Http請求給IIS,IIS透過Http.sys來監聽請求並交給w3wp.exe這個應用程式來判斷是否要交由.net託管處理此次請求.
下篇我們會來詳細講述Httpmodule & Httphandler