1.IIS5.0的进程模型
如果把ASP.NET应用程序部署到windows server 2003 之前的版本(例如windows 2000、windows xp),IIS5.0进程模型是唯一的选择。根据该进程模型,aspnet_isapi.dll不能处理.aspx文件,而是充当调度程序。它搜集所有有关激活URL和基础资源的信息,然后把请求传递给另一个不同的进程:名为aspnet_wp.exe的asp.net工作进程。ISAPI扩展和工作进程之间的通信通过命名管道进行。
IIS5.0进程模型的整个原理图
工作进程的一个副本始终在运行,并托管所有活动的Web应用程序。唯一例外的情况是一个带多个CPU的Web服务器。在这种情况下,可以配置ASP.NET运行库,一边多个工作进程运行,使每个CPU分配到一个工作进程。例如,如果有多个CPU,并且需要运行线程安全的代码,但又不足以假设它在一个多处理器环境下也能顺利运行,则需要这么做。多个进程在一台单服务器中的多个CPU上运行的模型成为Web garden,并受machine.config文件中的<processModel>节上的属性控制。
当一个工作进程被所有的CPU使用,并控制所有的Web应用程序时,并不一定表示没有实现进程隔离。事实上,每个Web应用程序用自己虚拟目录进行标识,并且属于一个不同的应用程序域(AppDomain)。每当客户第一次处理一个虚拟目录时,在ASP.NET工作进程内创建一个新的AppDomain。创建新的AppDomain后,ASP.NET运行库加载所有必须的程序集,并把控制传递给托管的HTTP管道以实际服务于请求。
如果客户从一个已经运行的Web应用程序请求一个页,则ASP.NET运行库只是把该请求转发到与该虚拟目录关联的先有的AppDomain。如果该AppDomain中没有加载处理该页所需的程序集,则动态地创建它;否则,如果在第一次调用时已经创建,则只是使用它。