一、概述

不管是什么語言開發(fā)的web應(yīng)用程序,都是在解決一個問題,那就是用戶輸入url怎么把對應(yīng)的頁面響應(yīng)出來,如何通過url映射到響應(yīng)的類,由于自己做asp.net的時間也不短了,還算是對asp.net的整個流程還算是了解,所以在自學(xué)JavaWeb的時候也很好奇JavaWeb中是如何處理的。

二、asp.net的工作原理

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動開發(fā)培訓(xùn)

下面的對asp.net的工作流程的介紹(紅字)以及我個人的理解。這里也給學(xué)asp.net的推薦一本書<<asp.net本質(zhì)論>>,這本書對http請求流程講的比較詳細,也是一本挺不錯的書。

以IIS 6.0為例,在工作進程w3wp.exe中,利用Aspnet_ispai.dll加載.NET運行時(如果.NET運行時尚未加載)。IIS 6引入了應(yīng)用程序池的概念,一個工作進程對應(yīng)著一個應(yīng)用程序池。一個應(yīng)用程序池可以承載一個或者多個Web應(yīng)用,每個Web應(yīng)用映射到一個IIS虛擬目錄。與IIS 5.x一樣,每一個Web應(yīng)用運行在各自的應(yīng)用程序域中。

下圖是我本地電腦的IIS應(yīng)用程序池列表。

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動開發(fā)培訓(xùn)

上圖紅線部分也顯示的很清楚,應(yīng)用程序池與工作進程相關(guān)聯(lián),包含一個或多個應(yīng)用程序,并提供不同應(yīng)用之間的隔離。在我本地Test應(yīng)用池中就有2個應(yīng)用。具體創(chuàng)建可以參考Nginx負載均衡篇http://www.cnblogs.com/5ishare/p/6129775.html.

如果HTTP.SYS接收到的HTTP請求是對該Web應(yīng)用的第一次訪問,當(dāng)成功加載了運行時后,會通過AppDomainFactory為該Web應(yīng)用創(chuàng)建一個應(yīng)用程序域(AppDomain)。隨后,一個特殊的運行時IsapiRuntime被加載。IsapiRuntime定義在程序集System.Web中,對應(yīng)的命名空間為System.Web.Hosting。IsapiRuntime會接管該HTTP請求。

這里的應(yīng)用程序域提供了四個重要的機制。

1.隔離  不同應(yīng)用程序域直接不能直接訪問

網(wǎng)友評論