应用程序初始化 <applicationInitialization>

概述

<applicationInitialization> 元素指定在收到请求之前主动执行 Web 应用程序初始化。 如果在接收 HTTP 请求之前执行初始化连接、启动内存缓存、运行查询和编译页面代码等初始化序列,则应用程序可以更快地启动。 应用程序初始化可以在应用程序启动时自动启动初始化过程。 应用程序初始化不一定使初始化过程运行得更快;它更快地启动了这个过程。

应用程序初始化还使你能够在初始化期间将请求重定向到静态页面(如占位符或闪屏),从而增强用户体验。 加载站点后,它将停止将托管请求映射到静态页面,并开始提供动态内容。 在 <applicationInitialization> 元素中使用 remapManagedRequestsTo 属性时,只能将托管请求映射到单个页面。 但是,应用程序初始化可以与带外 IIS URL 重写模块结合使用,以支持更复杂的占位符内容处理,包括到预先生成的静态内容的复杂映射。

除了应用程序初始化之外,还可以使初始化过程在应用程序池启动时启动。 将 <application> 元素中的 preLoadEnabled 属性设置为“true”即可。 要发生这种情况,<applicationPool> 元素中的启动模式必须设置为 AlwaysRunning。

兼容性

版本 说明
IIS 10.0 <applicationInitialization> 元素在 IIS 10.0 中未进行修改。
IIS 8.5 <applicationInitialization> 元素在 IIS 8.5 中未进行修改。
IIS 8.0 <applicationInitialization> 元素是在 IIS 8.0 中引入的。
IIS 7.5 空值
IIS 7.0 空值
IIS 6.0 空值

安装

要在 Web 服务器上支持应用程序初始化,必须安装应用程序初始化角色或功能。

Windows Server 2012 或 Windows Server 2012 R2

  1. 在任务栏上,单击 “服务器管理器”。
  2. 在“服务器管理器”中,单击“管理”菜单,然后单击“添加角色和功能”。
  3. 在“添加角色和功能”向导中,单击“下一步”。 选择安装类型,然后单击“下一步”。 选择目标服务器,然后单击“下一步”。
  4. 在“服务器角色”页上,依次展开“Web 服务器 (IIS)”、“Web 服务器”和“应用程序开发”,然后选择“应用程序初始化”。 单击 “下一步”
    Screenshot that shows the Roles pane. Application Initialization is highlighted and checked.
  5. 在“选择功能”页上,单击“下一步”
  6. “确认安装选择”页上,单击“安装”
  7. 在“结果” 页面中单击“关闭”

Windows 8 或 Windows 8.1

  1. 在“开始”屏幕上,将指针一直移动到左下角,右键单击“开始”按钮,然后单击“控制面板”
  2. 在“控制面板”中,单击“程序与功能”,然后单击“打开或关闭 Windows 功能”。
  3. 依次展开“Internet Information Services”、“万维网服务”和“应用程序开发功能”,然后选择“应用程序初始化”。
    Screenshot that shows the Windows Features pane. Application Initialization is highlighted and turned on.
  4. 单击“确定”。
  5. 单击“关闭” 。

操作方式

如何配置应用程序初始化

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用 Windows Server 2012 或更高版本:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8 或更高版本:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
  2. 在“连接”窗格中,选择服务器,展开服务器,展开“站点”,然后选择一个站点

  3. 在“主页”窗格中,双击“配置编辑器”功能

  4. 如果选择了网站,请在“自”文本框中选择“<站点名称> Web.config”,然后在“节”文本框中选择 system.webServer/applicationInitialization

  5. 如果选择服务器,请在“分区”文本框中选择 system.webServer/applicationInitialization

    Screenshot that shows the Configuration Editor pane. Collection is highlighted.

  6. 要指定要在初始化期间返回的静态文件的名称,请将 remapManagedRequestsTo 设置为文件的名称。

  7. 如果不想加载托管模块,请将 skipManagedModules 设置为 true

  8. 要指定每当应用程序重启时自动启动初始化过程,请将 doAppInitAfterRestart 设置为 true

  9. 要指定应用程序重新启动时要初始化的应用程序,请单击“(集合)”行,然后单击省略号。

  10. 在集合编辑器中,要添加要初始化的应用程序,请单击“添加”,单击“hostName”,然后将 hostName设置为要添加的主机名。 单击 initializationPage 并将其设置为应用程序的 URL。 关闭对话框。

    Screenshot that shows the Collection Editor pane. Host name is highlighted in the Properties box.

  11. 在“操作”窗格中,单击“应用”

配置

<applicationInitialization> 元素在服务器、站点或应用程序级别配置。

特性

属性 说明
doAppInitAfterRestart 可选布尔属性。

指定在应用程序重新启动时自动启动初始化过程。 请注意,这不同于应用程序元素中的 preLoadEnabled 属性,后者指定在应用程序池重启后启动初始化过程。

默认值为 false
remapManagedRequestsTo 可选的字符串属性。

指定在应用程序初始化期间要将请求重新映射到的页。

默认值为 ""
skipManagedModules 可选布尔属性。

指定在初始化期间是否加载托管模块,false 表示加载,true 表示不加载。

默认值为 false

子元素

元素 说明
add 可选元素。

指定要在应用程序重启时初始化的应用程序。

配置示例

以下示例演示应用程序初始化的配置。

<system.webServer>
   <applicationInitialization
      doAppInitAfterRestart="true"
      skipManagedModules="true"
      remapManagedRequestsTo="filename.htm">
      <add initializationPage="/default.aspx" hostName="myhost"/>
   </applicationInitialization>
</system.webServer>

代码示例

以下示例为站点配置 <applicationInitialization>

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/applicationInitialization /remapManagedRequestsTo:"HelloJoe.htm" /skipManagedModules:"True" /doAppInitAfterRestart:"True"  /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/applicationInitialization /+"[initializationPage='JoesSite.htm',hostName='JoesHost']" /commit:apphost

注意

使用 AppCmd.exe 配置这些设置时,必须确保将 commit 参数设置为 apphost。 这会将配置设置提交到 ApplicationHost.config 文件中的相应位置部分。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample {

    private static void Main() {
        
        using(ServerManager serverManager = new ServerManager()) { 
            Configuration config = serverManager.GetApplicationHostConfiguration();
            
            ConfigurationSection applicationInitializationSection = config.GetSection("system.webServer/applicationInitialization", "Default Web Site");
            applicationInitializationSection["remapManagedRequestsTo"] = @"HelloJoe.htm";
            applicationInitializationSection["skipManagedModules"] = true;
            applicationInitializationSection["doAppInitAfterRestart"] = true;
            
            ConfigurationElementCollection applicationInitializationCollection = applicationInitializationSection.GetCollection();
            
            ConfigurationElement addElement = applicationInitializationCollection.CreateElement("add");
            addElement["initializationPage"] = @"JoesSite.htm";
            addElement["hostName"] = @"JoesHost";
            applicationInitializationCollection.Add(addElement);
            
            serverManager.CommitChanges();
        }
    }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
     
     Sub Main()
         Dim serverManager As ServerManager = New ServerManager
         Dim config As Configuration = serverManager.GetApplicationHostConfiguration
         Dim applicationInitializationSection As ConfigurationSection = config.GetSection("system.webServer/applicationInitialization", "Default Web Site")
         applicationInitializationSection("remapManagedRequestsTo") = "HelloJoe.htm"
         applicationInitializationSection("skipManagedModules") = true
         applicationInitializationSection("doAppInitAfterRestart") = true
         Dim applicationInitializationCollection As ConfigurationElementCollection = applicationInitializationSection.GetCollection
         Dim addElement As ConfigurationElement = applicationInitializationCollection.CreateElement("add")
         addElement("initializationPage") = "JoesSite.htm"
         addElement("hostName") = "JoesHost"
         applicationInitializationCollection.Add(addElement)
         serverManager.CommitChanges
     End Sub
 End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var applicationInitializationSection = adminManager.GetAdminSection("system.webServer/applicationInitialization", "MACHINE/WEBROOT/APPHOST/Default Web Site");
applicationInitializationSection.Properties.Item("remapManagedRequestsTo").Value = "HelloJoe.htm";
applicationInitializationSection.Properties.Item("skipManagedModules").Value = true;
applicationInitializationSection.Properties.Item("doAppInitAfterRestart").Value = true;

var applicationInitializationCollection = applicationInitializationSection.Collection;

var addElement = applicationInitializationCollection.CreateNewElement("add");
addElement.Properties.Item("initializationPage").Value = "JoesSite.htm";
addElement.Properties.Item("hostName").Value = "JoesHost";
applicationInitializationCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set applicationInitializationSection = adminManager.GetAdminSection("system.webServer/applicationInitialization", "MACHINE/WEBROOT/APPHOST/Default Web Site")
applicationInitializationSection.Properties.Item("remapManagedRequestsTo").Value = "HelloJoe.htm"
applicationInitializationSection.Properties.Item("skipManagedModules").Value = true
applicationInitializationSection.Properties.Item("doAppInitAfterRestart").Value = true

Set applicationInitializationCollection = applicationInitializationSection.Collection

Set addElement = applicationInitializationCollection.CreateNewElement("add")
addElement.Properties.Item("initializationPage").Value = "JoesSite.htm"
addElement.Properties.Item("hostName").Value = "JoesHost"
applicationInitializationCollection.AddElement(addElement)

adminManager.CommitChanges()

PowerShell

Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/applicationInitialization" -name "remapManagedRequestsTo" -value "HelloJoe.htm"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/applicationInitialization" -name "skipManagedModules" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/applicationInitialization" -name "doAppInitAfterRestart" -value "True"

Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/applicationInitialization" -name "." -value @{initializationPage='JoesSite.htm';hostName='JoesHost'}