程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> MVC系列(1)進入CLR

MVC系列(1)進入CLR

編輯:關於ASP.NET

MVC之前的那點事兒系列,是筆者在2012年初閱讀MVC3源碼的時候整理的,主要講述的是從HTTP請求道進入MVCHandler之前的內容,包括了原創,翻譯,轉載,整理等各類型文章,當然也參考了博客園多位大牛的文章,對此表示感謝,這次有時間貼出來,希望對大家有用。

主要內容

本文講解的是:服務器接受Http Request請求之後,是如何進入.Net CLR,從而進一步操作的。

我們大家都知道,IIS必須先接受請求,然後才能有機會進入CLR,但對請求(request)是怎麼從Web服務器傳送到ASP.NET運行時的卻不甚了解。IIS由於版本的不同,在進入CLR時候方式可能有所不同,本章節將就IIS5/6/7的三本版本的進入方式給予解釋,通過對這些底層機制的了解,可以讓我們對 ASP.net 有更深的理解。。

IIS 5 的 ASP.net 請求處理過程

IIS5核心特征是:IIS是允許在一個叫InetInfo.exe的進程上的,所以無論是aspx頁面還是html頁面都是通過這個進程處理的,其中,由於aspx頁面擴展名映射到了aspnet ISAPI.DLL上,所以如果頁面是aspx的話,aspnet ISAPI.DLL則創建aspnet_wp這個Worker Process,並在初始化的時候加載CLR,所以這是一個托管的環境。

需要注意的幾點是:

同一台服務器只能運行一個 aspnet_wp 進程,也就是說所有的ASP.NET Web Application都在同一個Worker Process 中,但是不意味著他們共享同一個context和數據庫, ASP.NET裡有個AppDomain的概念,每個站點或虛擬目錄都對應一個單獨的AppDomain,每個AppDomain是隔離的,有自己獨立的 context上下文,所以安全沒問題,所以我們的結論是:ASP.NET程序是繼續AppDomain的,而不是基於Process的。

ASP.NET  ISAPI 不但負責創建 aspnet_wp Worker Process,而且負責監控該進程,如果檢測到 aspnet_wp 的 Performance 降低到某個設定的下限,ASP.NET  ISAPI 將結束掉該進程,在Request來了以後,ASP.NET ISAPI 將重新創建新的 aspnet_wp Worker Process。

由於 IIS 和 Application 運行在他們各自的進程中,他們之間的通信必須采用特定的通信機制。由於之間的通信是同機器不同進程的通信(local interprocess communications),處於Performance的考慮,他們之間采用基於Named pipe的通信機制。ASP.NET ISAPI和Worker Process之間的通信通過他們之間的一組Pipe實現。同樣處於Performance的原因,ASP.NET ISAPI 通過異步的方式將Request 傳到Worker Process 並獲得 Response,但Worker Process 則是通過同步的方式向 ASP.NET ISAPI 獲得一些基於 Server 的變量。

IIS 6 的 ASP.net 請求處理過程

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved