ASP.NET HTTP运行时组成详解__教程 |
|
日期:2007-5-20 1:18:19 人气:112 [大 中 小] |
|
|
|
收到请求后,ASP.NET 辅助进程将通知 ASP.NET ISAPI,它将为请求服务。通知通过同步 I/O 实现。之所以使用同步模型,是因为请求只有在 ISAPI 内部请求表中被标记为“executing”,辅助进程才能开始处理它。如果请求已经由特殊的辅助进程进行处理,则不能再将它指定到其他进程,除非原始进程已取消。 在辅助进程的上下文中执行请求。有时,辅助进程可能需要回调 ISAPI 以完成请求,也就是需要说枚举服务器变量。这种情况下,辅助进程将使用同步管道,因为这样可以保持请求处理逻辑的顺序。
完成后,响应被发送到打开了异步管道的 aspnet_isapi。现在,请求的状态变为“Done”,之后将从请求表中被删除。如果辅助进程崩溃,正在处理的所有请求仍将保持“executing”状态并持续一段时间。如果 aspnet_isapi 检测到辅助进程已取消,它将自动终止请求并释放所有相关的 IIS 资源。
以上说明是指默认的 ASP.NET 进程模型,即在 IIS 5.x 中运行的工作模型。IIS 6(Windows Server 2003 提供)的默认工作方式对 ASP.NET 进程模型也有影响。当集成在 IIS 6.0 中时,ASP.NET 1.1 会自动调整自己的工作方式以适应宿主环境。这时,不再需要使用 aspnet_wp 辅助进程,machine.config 文件中定义的某些配置参数也被忽略。从 ASP.NET 的角度来看,IIS 6 的最大改变是有关请求的一切都在 aspnet_isapi 的控制之下,且都处在 w3wp.exe 辅助进程的上下文中。辅助进程的帐户是为 Web 应用程序所属的应用程序池设置的帐户。默认情况下,该帐户是 NETWORKSERVICE—,它是一个内置的弱帐户,在功能上与 ASPNET 等价。
辅助进程受一个名为进程回收 (Recycling) 的功能的控制。进程回收具有 aspnet_isapi 功能,当现有进程消耗的内存太多、响应太慢或挂起时可以自动启动新进程。出现这种情况时,新请求将由新实例处理,新实例从而变成新的活动进程。但是,指定给旧进程的所有请求仍保持挂起状态。如果旧进程结束了挂起的请求并进入空闲状态,该进程即终止。如果辅助进程崩溃,或者由于其他原因停止处理请求,则所有挂起的请求将被重新指定给新进程。
尽管 ASP.NET ISAPI 和辅助进程是 ASP.NET 运行时结构的主要组成部分,但还有其他一些可执行文件也发挥着作用。下表列出了所有这些组件。
表 1:构成 ASP.NET 运行时环境的可执行文件 名称 类型 帐户 aspnet_isapi.dll Win32 DLL(ISAPI 扩展) LOCAL SYSTEM aspnet_wp.exe Win32 EXE ASPNET aspnet_filter.dll Win32 DLL(ISAPI 筛选器) LOCAL SYSTEM aspnet_state.exe Win32 NT Service ASPNET
aspnet_filter.dll 组件是一个小的 Win32 ISAPI 筛选器,用来备份 ASP.NET 应用程序的无 Cookie 会话状态。在 Windows Server 2003 中,当启用 IIS 6 进程模型时,aspnet_filter.dll 还将筛选出 Bin 目录中对非可执行资源的请求。
aspnet_state.exe 的作用对 Web 应用程序更为重要,因为它用于管理会话状态。该项服务是可选的,可以用来在 Web 应用程序内存空间之外保存会话状态数据。该可执行文件是一种 NT 服务,既可以在本地运行,也可以远程运行。当该服务被激活后,可以将 ASP.NET 应用程序配置为将所有会话信息保存在此进程的内存中。一种类似的方案是提供更为可靠的数据存储方式,不受进程回收和 ASP.NET 应用程序故障的影响。该服务在 ASPNET 本地帐户下运行,但可以使用服务控制管理器 (Service Control Manager) 接口来配置它。
另一个应该介绍的可执行文件是 aspnet_regiis.exe,尽管严格来讲,它并不属于 ASP.NET 运行时结构。该实用程序可以用来配置环境,以在一台计算机上并行执行不同版本的 ASP.NET,还可用于维修 IIS 和 ASP.NET 损坏的配置。该实用程序的工作方式是更新存储在 IIS 配置数据库的根目录和子目录中的脚本映射。脚本映射是资源类型和 ASP.NET 模块之间的一种关联关系。最后,还可以使用该工具来显示已安装的 ASP.NET 版本的状态,执行其他配置操作,如授予对特定文件夹的 NTFS 权限、创建客户脚本目录。
Web Garden 模型
Web Garden 模型可以通过 machine.config 文件中的 <processModel> 部分进行配置。请注意,<processModel> 部分是唯一不能放在应用程序特定的 web.config 文件中的配置部分。这就是说,Web Garden 模式可以应用到计算机中运行的所有应用程序。但通过使用 machine.config 源文件中的 <location> 节点,可以针对各个应用程序调节计算机的设置。
<processModel> 部分有两个属性可以影响 Web Garden 模型,它们是 webGarden 和 cpuMask。webGarden 属性接受布尔值,表示是否使用了多个辅助进程(一个相关的 CPU 对应一个进程)。默认情况下,该属性的值为 false。cpuMask 属性保存一个 DWORD 值,该值的二进制表示为能够运行 ASP.NET 辅助进程的 CPU 提供了位屏蔽。其默认值为 -1 (0xFFFFFF),表示可以使用所有可用的 CPU。如果 webGarden 属性为 false,则 cpuMask 属性的内容将被忽略。cpuMask 属性还为正在运行的 aspnet_wp.exe 的副本数设置了上限。
常言道“闪光的不都是金子”,用在这里很合适。Web Garden 模式使得多个辅助进程可以同时运行。但是,需要注意的是所有进程都会有自己的应用程序状态、进程内会话状态、ASP.NET 缓存、静态数据以及运行应用程序所需的其他内容。启用 Web Garden 模式之后,ASP.NET ISAPI 将根据 CPU 的数量尽可能多地启动辅助进程,每个辅助进程都是下一进程的完整克隆(每一进程都与相应的 CPU 密切相关)。为平衡工作负荷,传入的请求以单循环的方式在运行的进程之间进行划分。辅助进程就象在单处理器中一样被回收。请注意,ASP.NET 继承了操作系统中所有的 CPU 使用限制,并且不包括实现限制的自定义语义。 |
|
出处:本站原创 作者:佚名 |
|
|