asp.net 请求的处理逻辑可以概括为以下步骤:
当请求到达时,iis 检查资源类型并调用 asp.net isapi 扩展。如果启用了默认的进程模型,as.net_isapi 会将请求排队,并将请求分配给辅助进程。所有的请求数据都通过异步 i/o 发送。如果启用了 iis 6 进程模型,请求将自动在辅助进程 (w3wp.exe) 中排队,此辅助进程用于处理应用程序所属的 iis 应用程序池。iis 6 辅助进程不了解 asp.net 和托管代码的任何情况,它只是处理 *.aspx 扩展并加载 as.net_isapi 模块。当 asp.net isapi 在 iis 6 进程模型中运行时,它的工作方式有所不同,仅在 w3wp.exe 辅助进程的上下文中加载 clr。
收到请求后,asp.net 辅助进程将通知 asp.net isapi,它将为请求服务。通知通过同步 i/o 实现。之所以使用同步模型,是因为请求只有在 isapi 内部请求表中被标记为“executing”,辅助进程才能开始处理它。如果请求已经由特殊的辅助进程进行处理,则不能再将它指定到其他进程,除非原始进程已取消。
在辅助进程的上下文中执行请求。有时,辅助进程可能需要回调 isapi 以完成请求,也就是需要说枚举服务器变量。这种情况下,辅助进程将使用同步管道,因为这样可以保持请求处理逻辑的顺序。
完成后,响应被发送到打开了异步管道的 as.net_isapi。现在,请求的状态变为“done”,之后将从请求表中被删除。如果辅助进程崩溃,正在处理的所有请求仍将保持“executing”状态并持续一段时间。如果 as.net_isapi 检测到辅助进程已取消,它将自动终止请求并释放所有相关的 iis 资源。
以上说明是指默认的 asp.net 进程模型,即在 iis 5.x 中运行的工作模型。iis 6(windows server 2003 提供)的默认工作方式对 asp.net 进程模型也有影响。当集成在 iis 6.0 中时,asp.net 1.1 会自动调整自己的工作方式以适应宿主环境。这时,不再需要使用 as.net_wp 辅助进程,machine.config 文件中定义的某些配置参数也被忽略。从 asp.net 的角度来看,iis 6 的最大改变是有关请求的一切都在 as.net_isapi 的控制之下,且都处在 w3wp.exe 辅助进程的上下文中。辅助进程的帐户是为 web 应用程序所属的应用程序池设置的帐户。默认情况下,该帐户是.networkservice—,它是一个内置的弱帐户,在功能上与 as.net 等价。
辅助进程受一个名为进程回收 (recycling) 的功能的控制。进程回收具有 as.net_isapi 功能,当现有进程消耗的内存太多、响应太慢或挂起时可以自动启动新进程。出现这种情况时,新请求将由新实例处理,新实例从而变成新的活动进程。但是,指定给旧进程的所有请求仍保持挂起状态。如果旧进程结束了挂起的请求并进入空闲状态,该进程即终止。如果辅助进程崩溃,或者由于其他原因停止处理请求,则所有挂起的请求将被重新指定给新进程。
尽管 asp.net isapi 和辅助进程是 asp.net 运行时结构的主要组成部分,但还有其他一些可执行文件也发挥着作用。下表列出了所有这些组件。
表 1:构成 asp.net 运行时环境的可执行文件
名称 类型 帐户
as.net_isapi.dll win32 dll(isapi 扩展) local system
as.net_wp.exe win32 exe as.net
as.net_filter.dll win32 dll(isapi 筛选器) local system
as.net_state.exe win32 nt service as.net
as.net_filter.dll 组件是一个小的 win32 isapi 筛选器,用来备份 asp.net 应用程序的无 cookie 会话状态。在 windows server 2003 中,当启用 iis 6 进程模型时,as.net_filter.dll 还将筛选出 bin 目录中对非可执行资源的请求。
as.net_state.exe 的作用对 web 应用程序更为重要,因为它用于管理会话状态。该项服务是可选的,可以用来在 web 应用程序内存空间之外保存会话状态数据。该可执行文件是一种 nt 服务,既可以在本地运行,也可以远程运行。当该服务被激活后,可以将 asp.net 应用程序配置为将所有会话信息保存在此进程的内存中。一种类似的方案是提供更为可靠的数据存储方式,不受进程回收和 asp.net 应用程序故障的影响。该服务在 as.net 本地帐户下运行,但可以使用服务控制管理器 (service control manager) 接口来配置它。
另一个应该介绍的可执行文件是 as.net_regiis.exe,尽管严格来讲,它并不属于 asp.net 运行时结构。该实用程序可以用来配置环境,以在一台计算机上并行执行不同版本的 asp.net,还可用于维修 iis 和 asp.net 损坏的配置。该实用程序的工作方式是更新存储在 iis 配置数据库的根目录和子目录中的脚本映射。脚本映射是资源类型和 asp.net 模块之间的一种关联关系。最后,还可以使用该工具来显示已安装的 asp.net 版本的状态,执行其他配置操作,如授予对特定文件夹的 ntfs 权限、创建客户脚本目录。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器