IIS的集成模式与经典模式
IIS 中的组件
IIS 包含多个组件,它们为 Windows Server® 2008 (IIS 7.0) 和 Windows Server 2008 R2 (IIS 7.5) 中的应用程序和 Web 服务器角色执行重要功能。 每个组件都有个用处,例如侦听向服务器发出的请求、管理进程和读取配置文件。 这些组件包括协议侦听器(例如 HTTP.sys)和服务(例如 World Wide Web 发布服务(WWW 服务)和 Windows Process Activation Service (WAS))。
协议侦听器
协议侦听器接收特定于协议的请求,将其发送到 IIS 进行处理,然后将响应返回给请求者。 例如,当客户端浏览器从 Internet 请求网页时,HTTP 侦听器 HTTP.sys 会接收该请求并将其发送到 IIS 进行处理。 IIS 处理请求后,HTTP.sys 就会向客户端浏览器返回响应。
默认情况下,IIS 提供 HTTP.sys 作为协议侦听器,用以侦听 HTTP 和 HTTPS 请求。 IIS 6.0 中引入了 HTTP.sys,这一 HTTP 特定协议侦听器可用于处理 HTTP 请求。 HTTP.sys 在 IIS 7 及更高版本中仍然是 HTTP 侦听器,但支持范围包括安全套接字层 (SSL)。
为了支持使用 HTTP 和 HTTPS 之外的协议的服务和应用程序,可以使用 Windows Communication Foundation (WCF) 等技术。 WCF 具有侦听器适配器,可提供协议侦听器和侦听器适配器的功能。 本文档稍后将介绍侦听器适配器。 有关 WCF 的详细信息,请参阅 MSDN 上的“Windows Communication Foundation”。
超文本传输协议堆栈 (HTTP.sys)
HTTP 侦听器是 Windows 操作系统网络子系统的一部分,会作为内核模式设备驱动程序来实现,这一驱动程序叫做 HTTP 堆栈 (HTTP.sys)。 HTTP.sys 侦听来自网络的 HTTP 请求,将请求传递到 IIS 进行处理,然后将处理后的响应返回到客户端浏览器。
在 IIS 6.0 中,HTTP.sys 取代了 Windows Sockets API (Winsock),后者是以前版本的 IIS 用于接收 HTTP 请求和发送 HTTP 响应的用户模式组件。 IIS 7 及更高版本继续依赖于 HTTP.sys 来处理 HTTP 请求。
HTTP.sys 具有以下好处:
内核模式高速缓存。 无需切换到用户模式即可处理对缓存响应的请求。
内核模式请求队列。 由于内核将请求直接转发到正确的工作进程,减少了请求在上下文切换方面的开销。 如果没有工作进程可以接受请求,则内核模式请求队列将保留该请求,直到工作进程接收该请求。
请求预处理和安全筛选。
World Wide Web 发布服务(WWW 服务)
在 IIS 7 及更高版本中,以前由 World Wide Web 发布服务(WWW 服务)单独处理的功能现在分为两个服务:WWW 服务和新服务 Windows Process Activation Service (WAS)。 这两个服务在同一个 Svchost.exe 进程中作为 LocalSystem 运行,并共享相同的二进制文件。
WWW 服务在 IIS 6.0 中的工作原理
在 IIS 6.0 中,WWW 服务管理 IIS 中的以下主要区域:
HTTP 管理和配置
流程管理
性能监视
HTTP 管理和配置
WWW 服务从 IIS 元数据库读取配置信息,并使用该信息来配置和更新 HTTP 侦听器 HTTP.sys。 此外,WWW 服务还会启动、停止、监视和管理负责处理 HTTP 请求的工作进程。
性能监视
WWW 服务监视性能,并为网站和 IIS 缓存提供性能计数器。
进程管理
WWW 服务管理应用程序池和工作进程,例如启动、停止和回收工作进程。 此外,WWW 服务还监视工作进程的运行状况,并在多个工作进程在可配置的时间内发生故障时调用快速故障检测来阻止新进程启动。
WWW 服务在 IIS 中的工作原理
在 IIS 中,WWW 服务不再管理工作进程。 相反,WWW 服务是 HTTP 侦听器 HTTP.sys 的侦听器适配器。 WWW 服务作为监听适配器,主要负责配置 HTTP.sys,在配置发生变更时更新 HTTP.sys,以及在请求进入请求队列时通知 WAS。
此外,WWW 服务继续收集网站的计数器。 由于性能计数器仍然是 WWW 服务的一部分,因此它们为 HTTP 专属,不适用于 WAS。
Windows 进程激活服务 (WAS)
在 IIS 7 及更高版本中,Windows 进程激活服务 (WAS) 管理应用程序池配置和工作进程,而不是 WWW 服务。 这使你能够对 HTTP 和非 HTTP 站点使用相同的配置和进程模型。
此外,如果不需要 HTTP 功能,则可以在没有 WWW 服务的情况下运行 WAS。 例如,如果不需要侦听 HTTP.sys 中的 HTTP 请求,则可以通过 WCF 侦听器适配器(例如 NetTcpActivator)管理 Web 服务,而无需运行 WWW 服务。 有关 WCF 侦听器适配器以及如何使用 WAS 在 IIS 7 及更高版本中托管 WCF 应用程序的信息,请参阅 MSDN 上的在 WCF 中托管。
WAS 中的配置管理
启动时,WAS 从 ApplicationHost.config 文件中读取某些信息,并将该信息传递给服务器上的侦听器适配器。 侦听器适配器是在 WAS 和协议侦听器(如 HTTP.sys)之间建立通信的组件。 侦听器适配器收到配置信息后,配置其相关协议侦听器,并准备侦听器以侦听请求。
对于 WCF,侦听器适配器包括协议侦听器的功能。 因此,WCF 侦听器适配器(如 NetTcpActivator)会根据 WAS 中的信息进行配置。 配置 NetTcpActivator 后,它会侦听使用 net.tcp 协议的请求。 有关 WCF 侦听器适配器的详细信息,请参阅 MSDN 上的 WAS 激活体系结构。
以下列表描述了 WAS 从配置中读取的信息类型:
全局配置信息
HTTP 和非 HTTP 协议的协议配置信息
应用程序池配置,例如进程帐户信息
站点配置,例如绑定和应用程序
应用程序配置,例如启用的协议和应用程序所属的应用程序池
如果 ApplicationHost.config 发生更改,WAS 将收到通知,并使用新信息更新侦听器适配器。
IIS 中的请求处理
在 IIS 中,IIS 和 ASP.NET 请求管道组合在一起,以使用集成方法处理请求。 新的请求处理架构由本地和托管模块的有序列表组成,这些模块执行特定任务以响应请求。
此设计为早期版本的 IIS 提供了多项优势。 第一,所有文件类型都可以使用最初仅适用于托管代码的功能。 例如,现在可以对静态文件、动态服务器网页 (ASP) 文件以及站点和应用程序中的所有其他文件类型使用 ASP.NET Forms 身份验证和统一资源定位器 (URL) 授权。
第二,这种设计消除了 IIS 和 ASP.NET 中多个功能的重复。 例如,当客户端请求托管文件时,服务器调用集成管道中对应的身份验证模块来对客户端进行身份验证。 在以前版本的 IIS 中,同一请求将在 IIS 管道和 ASP.NET 管道中经历身份验证过程。
第三,可以在一个位置管理所有模块,而不是在 IIS 中管理某些功能,然后在 ASP.NET 配置中管理某些功能。 这简化了服务器上的站点和应用程序的管理。
应用程序池按进程边界分隔应用程序,以防止一个应用程序影响服务器上的另一个应用程序。 在 IIS 7 及更高版本中,应用程序池继续使用 IIS 6.0 工作进程隔离模式。 此外,现在可以指定一个设置,用于确定如何处理涉及托管资源的请求:集成模式或经典模式。
备注
在 IIS 6.0 中,工作进程隔离模式和 IIS 5.0 隔离模式是在服务器级别设置的。 这样就不可能在同一台服务器上运行这两种隔离模式。 但是,在 IIS 7 及更高版本中,集成模式和经典模式是在应用程序池级别设置的,这使你能够在同一服务器上具有不同进程模式的应用程序池中同时运行应用程序。
集成应用程序池模式
当应用程序池处于集成模式时,可以利用 IIS 和 ASP.NET 的集成请求处理体系结构。 当应用程序池中的工作进程收到请求时,系统会通过有序的事件列表传递请求。 每个事件都会调用必要的本机和托管模块来处理部分请求并生成响应。
在集成模式下运行应用程序池有几个好处。 首先是已将 IIS 和 ASP.NET 的请求处理模型集成到统一的处理模型中。 此模型消除了以前在 IIS 和 ASP.NET(例如身份验证)中重复的步骤。 此外,集成模式使所有内容类型都可以使用托管功能。
经典应用程序池模式
当应用程序池处于经典模式时,IIS 7 及更高版本以与 IIS 6.0 工作进程隔离模式相同的方式处理请求。 ASP.NET 请求首先经过 IIS 中的本机处理步骤,然后路由到 Aspnet_isapi.dll,以便在托管运行时中处理托管代码。 最后,请求通过 IIS 路由回以发送响应。
IIS 和 ASP.NET 请求处理模型的这种分离会导致部分处理步骤重复,例如身份验证和授权。 此外,托管代码功能(如 Forms 身份验证)仅适用于 ASP.NET 应用程序或符合以下要求的应用程序:使用脚本映射要由 aspnet_isapi.dll 处理的所有请求。
在将生产环境升级到 IIS 7 及更高版本并在集成模式下将应用程序分配到应用程序池之前,请务必在集成模式下测试现有应用程序的兼容性。 仅当应用程序无法在集成模式下工作时,才应在经典模式下将应用程序添加到应用程序池。 例如,应用程序可能依赖于从 IIS 传递到托管运行时的身份验证令牌,并且由于 IIS 7 及更高版本中的新体系结构,该进程会破坏应用程序。
IIS 中的 HTTP 请求处理IIS 7 及更高版本具有与 IIS 6.0 类似的 HTTP 请求处理流。 本部分中的关系图概述了进程中的 HTTP 请求。
以下列表描述了图 1 中显示的请求处理流:
- 1、当客户端浏览器为 Web 服务器上的资源发起 HTTP 请求时,HTTP.sys 会截获请求。
- 2、HTTP.sys 联系 WAS 以从配置存储中获取信息。
- 3、WAS 向配置存储 applicationHost.config 请求配置信息。
- WWW 服务接收配置信息,例如应用程序池和站点配置。
- 5、WWW 服务使用配置信息来配置 HTTP.sys。
- 6、WAS 为发出请求的应用程序池启动工作进程。
- 7、工作进程处理请求并返回对 HTTP.sys 的响应。
- 8、客户端收到响应。
图 1:HTTP 请求概述
在工作进程中,系统会按照 Web 服务器核心中的几个有序步骤(称为事件)处理 HTTP 请求。 在每个事件中,本机模块都会处理部分请求,例如验证用户身份或将信息添加到事件日志中。 如果请求需要托管模块,则本机 ManagedEngine 模块会创建一个 AppDomain,托管模块可以在其中执行必要的处理,例如使用 Forms 身份验证对用户进行身份验证。 当请求通过 Web 服务器核心中的所有事件时,系统会向 HTTP.sys 返回响应。 下面的图 2 显示了进入工作进程的 HTTP 请求。
图 2:工作进程内 HTTP 请求的详细信息
来源:https://learn.microsoft.com/zh-cn/iis/get-started/introduction-to-iis/introduction-to-iis-architecture#http-request-processing-in-iis
本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com