自动启动功能
AppFabric 的 自动启动 功能以 Windows 7 和 Windows Server 2008 R2 中包含的 Internet 信息服务 (IIS) 7.5 的 自动启动 功能为基础而构建。在 IIS 中,您可以将应用程序池及其所有或部分应用程序配置为在该 IIS 服务启动时自动启动。AppFabric 自动启动功能扩展了此功能,因此,您可以将应用程序中的所有或部分服务配置为在该应用程序启动时自动启动。
自动启动功能的优点
当为某个服务启用 自动启动 功能时,该服务会在其接收到来自客户端的第一条 WCF 消息之前、其所属的应用程序启动时立即启动并运行。因此,该服务会迅速处理第一条消息,因为它已经初始化。例如,假设某个服务需要连接到某个数据库,以读取成百上千行数据来填充首次创建的 .NET Framework 缓存数据结构。服务准备好开始进行实际操作之前,初始化过程需要一段较长的时间。在此情况下,如果使用 自动启动,则该服务会在其接收到第一个调用时完成初始化。
通过使用 IIS 附带的自定义 WCF 侦听器适配器,IIS 的 HTTP.SYS 组件处理 HTTP 请求,Windows Process Activation Service (WAS) 处理 TCP、Named Pipe 和 MSMQ 请求。侦听器适配器在 WAS 与使用非 HTTP 协议的服务之间建立通信。要支持对通过其他协议接收的消息进行处理,您必须开发自定义侦听适配器和其它支持模块,这会是一项复杂的任务。有关侦听器适配器的详细信息,请参阅侦听器适配器 (https://go.microsoft.com/fwlink/?LinkId=160359)。使用 自动启动 支持,可以将支持任何协议的应用程序部署到 IIS。如果为这些部署的应用程序启用 自动启动,则 WAS 会激活这些应用程序并使其在工作进程中保持为活动状态。
自动启动方案
使用自动启动功能的服务支持如下方案:
部署有某个应用程序的计算机重新启动。IIS、WAS、应用程序池、应用程序和服务配置为随计算机启动而自动启动。在此方案中,服务会在该应用程序重新启动时自动启动。如果该应用程序配置为自动启动所有服务,则该应用程序中的所有服务都会自动启动;否则,仅 Web.config 文件中指定的服务会启动。
某些协议(如 WS-Discovery 公告协议)要求应用程序始终可用。当您为某个应用程序和该应用程序中的服务启用自动启动时,则无论包含这些服务的应用程序何时启动,Windows Server AppFabric 自动启动功能都会自动启动这些服务。
服务所属的应用程序池检测到其过多的工作进程在某个指定时间段内运行不正常,并启动快速故障保护进程。自动启动功能支持快速故障保护,因为如果某个指定的时间段内进程失败的次数超过可配置的次数,应用程序及其服务将不会在超出快速故障保护阈值后重新启动。
计算机重新启动方案
下表包含一些自动启动功能支持的计算机重新启动示例方案中涉及的典型步骤:
如果服务配置为自动启动,则 Windows Process Activation Service (WAS) 会启动。您可以使用“管理工具”中的“服务”小程序来配置 WAS。
WAS 启动所有配置为自动启动的应用程序池。这些应用程序池上的 startMode 设置在 ApplicationHost.config 文件中设置为 AlwaysRunning。
<applicationPools> <add name=”MyAppPool” startMode=”AlwaysRunning” /> </applicationPools>
WAS 中的应用程序管理器加载所有配置为自动启动的应用程序。这些应用程序的 serviceAutoStartEnabled 属性在 ApplicationHost.config 文件中设置为 true。
<sites> <site name="MySite" id="1"> <application path="/" serviceAutoStartEnabled=”true” serviceAutoStartProvider=”Service” serviceAutoStartMode=”All/Custom”> <virtualDirectory path="/" physicalPath="C:\MySite" /> </application> </site> </sites>
应用程序初始化进程调用自动启动模块,该模块启动配置为自动启动的服务。
serviceAutoStartProvider 属性是一个 IIS 扩展点,可用于启动自定义对象。Windows Server AppFabric 安装程序安装 Service 提供程序,并将 IIS 架构扩展到添加 serviceAutoStartMode 属性。
如果某个应用程序的 serviceAutoStartMode 设置为 All,则该应用程序中的所有服务都会启动。如果某个应用程序的 serviceAutoStartMode 设置设置为 Custom,则只有 Web.config 文件中指定的服务启动。
自动启动模块使用 relativeVirtualPath 设置的值来加载服务。以下配置片断来自 Web.config 文件,该文件为两个服务配置了 relativeVirtualPath 设置。某个服务的 relativeVirtualPath 路径是该服务相对于包含该服务的应用程序的路径。
// a sample Web.config fragment with two services configured to use the auto-start feature. <Microsoft.ProcessServer.Hosting> <serviceAutoStart> <add relativeVirtualPath =”/Calendar/Appointments.xamlx” > <add relativeVirtualPath =”/BookStore/ShoppingCart.svc” > </serviceAutoStart> </Microsoft.ProcessServer.Hosting>
技巧 服务的自动启动设置存储在 Web.config 文件中,但应用程序池和应用程序的自动启动设置存储在 ApplicationHost.config 文件中。
配置自动启动
您可以使用 AppFabric 提供的 IIS Manager 扩展或 cmdlet 来为 WCF 或 WF 服务配置 自动启动 功能。配置 自动启动 功能详细的循序渐进说明,请参阅使用 IIS Manager 配置自动启动部分的使用 Windows Server AppFabric Cmdlet 配置自动启动和配置自动启动。
备注
如果为某个服务启用了 自动启动 功能,则 IIS 会忽略应用程序池和使用该应用程序池的应用程序上的“空闲超时”设置。即使在该应用程序池的空闲时间超过“空闲超时”值之后,与该应用程序池关联的工作进程保留在内存中。
警告
如果某个服务的初始化代码冗长,导致初始化花费了较长时间,则 IIS 启动时间段可能会过期并在当前状态关闭该进程。一个好的设计决策可能是:如果在服务具有多个 CPU 的计算机上运行时,则为服务使用来自初始化代码中的多个线程。
另请参阅
概念
2011-12-05