一、概述
不管是什么语言开发的web应用程序,都是在解决一个问题,那就是用户输入url怎么把对应的页面响应出来,如何通过url映射到响应的类,由于自己做asp.net的时间也不短了,还算是对asp.net的整个流程还算是了解,所以在自学JavaWeb的时候也很好奇JavaWeb中是如何处理的。
二、asp.net的工作原理
下面的对asp.net的工作流程的介绍(红字)以及我个人的理解。这里也给学asp.net的推荐一本书<<asp.net本质论>>,这本书对http请求流程讲的比较详细,也是一本挺不错的书。
以IIS 6.0为例,在工作进程w3wp.exe中,利用Aspnet_ispai.dll加载.NET运行时(如果.NET运行时尚未加载)。IIS 6引入了应用程序池的概念,一个工作进程对应着一个应用程序池。一个应用程序池可以承载一个或者多个Web应用,每个Web应用映射到一个IIS虚拟目录。与IIS 5.x一样,每一个Web应用运行在各自的应用程序域中。
下图是我本地电脑的IIS应用程序池列表。
上图红线部分也显示的很清楚,应用程序池与工作进程相关联,包含一个或多个应用程序,并提供不同应用之间的隔离。在我本地Test应用池中就有2个应用。具体创建可以参考Nginx负载均衡篇http://www.cnblogs.com/5ishare/p/6129775.html.
如果HTTP.SYS接收到的HTTP请求是对该Web应用的第一次访问,当成功加载了运行时后,会通过AppDomainFactory为该Web应用创建一个应用程序域(AppDomain)。随后,一个特殊的运行时IsapiRuntime被加载。IsapiRuntime定义在程序集System.Web中,对应的命名空间为System.Web.Hosting。IsapiRuntime会接管该HTTP请求。
这里的应用程序域提供了四个重要的机制。
1.隔离 不同应用程序域直接不能直接访问
延伸阅读
学习是年轻人改变自己的最好方式