知识大全 ASP.NET HTTP运行时组成详解(上)
Posted 模型
篇首语:人总要找点事情做,让自己忙起来,忙起来才知道生活不易,才明白平时的忧伤都是矫情。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET HTTP运行时组成详解(上)相关的知识,希望对你有一定的参考价值。
ASP.NET HTTP运行时组成详解(上) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
不管使用哪种底层平台 可靠性和性能都是对所有 Web 应用程序的主要要求 尽管从某种意义上讲 这两个要求是相互矛盾的 例如 要构建更可靠 更健壮的应用程序 可能需要将 Web 服务器与具体的应用程序分离 使应用程序在进程外工作 但是 如果在不同于 Web 服务器进程的内存环境中工作 应用程序将变慢 因此 需要采取合理的措施 以确保进程外代码尽可能快地运行
在构建 Microsoft? ASP NET 运行时环境时 依据的设计原则即 充分考虑可靠性和性能 得到的 ASP NET 进程模型包含了两个系统元素 一个存在于 Web 服务器进程中的进程内连接器 一个外部的辅助进程 另外 ASP NET 运行时结构的可伸缩能力很强 可以自动使用多处理器硬件中任意选定的处理器 这种模式被称为 Web Garden 它可以使多个辅助进程同时运行 而且各个进程均在独立的处理器中
高度概括起来 ASP NET 运行时具有三大属性
应用程序和 ASP NET 辅助进程之间完全分离 提供服务的辅助进程的寿命决不会影响应用程序的寿命 换句话说 当应用程序启动并处于运行状态时 辅助进程可以随时终止 尽管 ASP NET 应用程序从不在 Web 服务器内采用进程内的方式运行 但大多数情况下 其总体性能仍接近于进程内应用程序的性能
为 Web Garden 体系结构提供了内置的和可配置的支持 只要简单检查一下配置文件中的设置 辅助进程就可以克隆自己 以利用所有与进程密切相关的 CPU 因此 在大多数情况下 您在具备多处理器的计算机中获得的可缩放性将呈线性增长的趋势 (本文后面将详细介绍此内容 )
本文将介绍 ASP NET 运行时环境的组成元素 然后一步一步地讲述从 URL 请求变为纯 HTML 文本的 漫长而曲折 的过程
除非另有说明 否则以下介绍中均指 ASP NET 的默认进程模型 即 Microsoft? Internet Information Services (IIS) x 中唯一的模型
一 ASP NET 结构的组件
执行 ASP NET 应用程序需要宿主 Web 服务器的支持 在 Microsoft? Windows? 的 Server 平台中 Web 服务器由名为 inetinfo exe 的 IIS 可执行文件表示 Windows 及以上版本的操作系统本身均提供了 Web 服务器 但需要注意 在 Microsoft? Windows Server&# ; 中 并未默认安装 IIS 和 ASP NET 必须通过单击 控制面板 中的 添加或删除程序 小程序将其添加到系统中
IIS 是一个未托管的可执行程序 它提供了一个基于 ISAPI 扩展模块和筛选器模块的可扩展模型 通过编写此类模块 开发人员可以直接管理对特定资源类型的请求 并在各个预定义的步骤中接收当前请求 扩展和筛选器是一些 DLL 可以导出一些具有已知名称和签名的函数 这些插件组件是在 IIS 配置数据库中注册并配置的 只有少数几种被客户端请求的资源类型由 IIS 直接处理 例如 对 HTML 页面 文本文件 JPEG 和 GIF 图像的传入请求由 IIS 处理 对 Active Server Page (* asp) 文件的请求通过调用名为 asp dll 的 ASP 专用扩展模块进行解析 同样 对 ASP NET 资源(例如 * aspx * asmx * ashx)的请求将传递到 ASP NET ISAPI 扩展 该系统组件是一个名为 aspnet_isapi dll 的 Win DLL ASP NET 扩展可以处理多种资源类型 包括 Web 服务和 HTTP 处理程序调用
ASP NET ISAPI 扩展是一个 Win DLL 未集成托管代码 它是接收和分派对各种 ASP NET 资源的请求的控制中心 按照设计 该模块存在于 IIS 进程中 在具有管理员权限的 SYSTEM 帐户下运行 开发人员和系统管理员不能修改此帐户 ASP NET ISAPI 扩展负责调用 ASP NET 辅助进程 (aspnet_wp exe) 而该进程又负责控制请求的执行 除了对请求进行安排以外 ASP NET ISAPI 还监视辅助进程的运行情况 并在性能降低到一定程度时将进程取消
辅助进程是一小段 Win shell 代码 集成了公共语言运行库 (CLR) 并运行托管代码 它负责处理对 ASPX ASMX 和 ASHX 资源的请求 一般来说 此进程在一台给定的计算机中只有一个实例 所有当前激活的 ASP NET 应用程序均在其中运行 每个应用程序都位于一个独立的 AppDomain 中 但是 如前所述 辅助进程支持 Web Garden 模式 即进程的相同副本都运行在与进程密切相关的 CPU 中 (更多内容 请参阅本文后面的 Web Garden 模型 部分 )
ISAPI 和辅助进程之间的通讯是使用一组命名管道进行的 命名管道是一种 Win 机制 用于跨进程边界传输数据 顾名思义 命名管道的工作方式与管道相似 在一端输入数据 在另一端输出相同的数据 建立的管道既可以连接本地进程 也可以连接远程计算机上运行的进程 对于本地进程间通讯 管道是 Windows 中的最有效 最灵活的工具
为确保获得最优性能 aspnet_isapi 使用异步命名管道来将请求转发给辅助进程并获得响应 另一方面 辅助进程在需要查询有关 IIS 环境的信息(即服务器变量)时又使用同步管道 aspnet_isapi 模块创建固定数量的命名管道 并使用重叠的操作以通过小的线程池处理同一时间进行的连接 当通过管道进行的数据交换操作结束后 完成例程将断开客户端 并重新使用管道实例为新的客户端服务 线程池和重叠操作均可以保证使 ASP NET ISAPI 的性能达到令人满意的水平 但是 aspnet_isapi 扩展决不会处理 HTTP 请求
ASP NET 请求的处理逻辑可以概括为以下步骤
当请求到达时 IIS 检查资源类型并调用 ASP NET ISAPI 扩展 如果启用了默认的进程模型 aspnet_isapi 会将请求排队 并将请求分配给辅助进程 所有的请求数据都通过异步 I/O 发送 如果启用了 IIS 进程模型 请求将自动在辅助进程 (w wp exe) 中排队 此辅助进程用于处理应用程序所属的 IIS 应用程序池 IIS 辅助进程不了解 ASP NET 和托管代码的任何情况 它只是处理 * aspx 扩展并加载 aspnet_isapi 模块 当 ASP NET ISAPI 在 IIS 进程模型中运行时 它的工作方式有所不同 仅在 w wp exe 辅助进程的上下文中加载 CLR
收到请求后 ASP NET 辅助进程将通知 ASP NET ISAPI 它将为请求服务 通知通过同步 I/O 实现 之所以使用同步模型 是因为请求只有在 ISAPI 内部请求表中被标记为 executing 辅助进程才能开始处理它 如果请求已经由特殊的辅助进程进行处理 则不能再将它指定到其他进程 除非原始进程已取消 在辅助进程的上下文中执行请求 有时 辅助进程可能需要回调 ISAPI 以完成请求 也就是需要说枚举服务器变量 这种情况下 辅助进程将使用同步管道 因为这样可以保持请求处理逻辑的顺序
完成后 响应被发送到打开了异步管道的 aspnet_isapi 现在 请求的状态变为 Done 之后将从请求表中被删除 如果辅助进程崩溃 正在处理的所有请求仍将保持 executing 状态并持续一段时间 如果 aspnet_isapi 检测到辅助进程已取消 它将自动终止请求并释放所有相关的 IIS 资源
以上说明是指默认的 ASP NET 进程模型 即在 IIS x 中运行的工作模型 IIS (Windows Server 提供)的默认工作方式对 ASP NET 进程模型也有影响 当集成在 IIS 中时 ASP NET 会自动调整自己的工作方式以适应宿主环境 这时 不再需要使用 aspnet_wp 辅助进程 machine config 文件中定义的某些配置参数也被忽略 从 ASP NET 的角度来看 IIS 的最大改变是有关请求的一切都在 aspnet_isapi 的控制之下 且都处在 w wp exe 辅助进程的上下文中 辅助进程的帐户是为 Web 应用程序所属的应用程序池设置的帐户 默认情况下 该帐户是 NEORKSERVICE&# 它是一个内置的弱帐户 在功能上与 ASPNET 等价
辅助进程受一个名为进程回收 (Recycling) 的功能的控制 进程回收具有 aspnet_isapi 功能 当现有进程消耗的内存太多 响应太慢或挂起时可以自动启动新进程 出现这种情况时 新请求将由新实例处理 新实例从而变成新的活动进程 但是 指定给旧进程的所有请求仍保持挂起状态 如果旧进程结束了挂起的请求并进入空闲状态 该进程即终止 如果辅助进程崩溃 或者由于其他原因停止处理请求 则所有挂起的请求将被重新指定给新进程
尽管 ASP NET ISAPI 和辅助进程是 ASP NET 运行时结构的主要组成部分 但还有其他一些可执行文件也发挥著作用 下表列出了所有这些组件
表 构成 ASP NET 运行时环境的可执行文件
名称 类型 帐户 aspnet_isapi dll Win DLL(ISAPI 扩展) LOCAL SYSTEM aspnet_wp exe Win EXE ASPNET aspnet_filter dll Win DLL(ISAPI 筛选器) LOCAL SYSTEM aspnet_state exe Win NT Service ASPNET
aspnet_filter dll 组件是一个小的 Win ISAPI 筛选器 用来备份 ASP NET 应用程序的无 Cookie 会话状态 在 Windows Server 中 当启用 IIS 进程模型时 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 提供了位屏蔽 其默认值为 ( xFFFFFF) 表示可以使用所有可用的 CPU 如果 webGarden 属性为 false 则 cpuMask 属性的内容将被忽略 cpuMask 属性还为正在运行的 aspnet_wp exe 的副本数设置了上限
常言道 闪光的不都是金子 用在这里很合适 Web Garden 模式使得多个辅助进程可以同时运行 但是 需要注意的是所有进程都会有自己的应用程序状态 进程内会话状态 ASP NET 缓存 静态数据以及运行应用程序所需的其他内容 启用 Web Garden 模式之后 ASP NET ISAPI 将根据 CPU 的数量尽可能多地启动辅助进程 每个辅助进程都是下一进程的完整克隆(每一进程都与相应的 CPU 密切相关) 为平衡工作负荷 传入的请求以单循环的方式在运行的进程之间进行划分 辅助进程就象在单处理器中一样被回收 请注意 ASP NET 继承了操作系统中所有的 CPU 使用限制 并且不包括实现限制的自定义语义
总之 Web Garden 模型并不适用于所有应用程序 应用程序的状态越多 其的性能损失也越多 工作数据存储在共享内存的块中 以便一个进程输入的变化可以立即被其他进程得知 但是 处理请求时 工作数据被复制到进程的上下文中 因此 各个辅助进程将处理自己的工作数据 而应用程序的状态越多 性能损失就越大 鉴于此 仔细 明智的应用程序基准测试是绝对必要的
cha138/Article/program/net/201311/15777相关参考
cha138/Article/program/net/201311/14192
ASP.NET中的HTTP模块和处理程序(上) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 介
ASP.NET图象处理详解[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在使用ASP的时
ASP.NETSession详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 阅读本文章前需要
ASP.NET图象处理详解[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!<%@PageLan
ASP.NET图象处理详解(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
ASP.NET图象处理详解(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
ASP.NET图象处理详解(3) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!三画图特效 如果只
ASP.NET图象处理详解[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 二读取和改变图象
ASP.NET图象处理详解[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以上的程序显示图