添加应用程序池 <add>
概述
<applicationPools>
元素的 <add>
元素控制 IIS 7 及更高版本应用程序池的配置设置。 在 ApplicationHost.config 文件中为要在 IIS 服务器上运行的每个应用程序池创建一个 <add>
元素。
<add>
元素可以包含属性和子元素,用于配置管道处理模式以及应用程序池中工作进程用于传入请求的 .NET Framework 版本。 此元素还包含用于配置应用程序池标识、性能和运行状况以及回收应用程序池设置的子元素。
在 IIS 7 及更高版本上创建新的应用程序池时,至少必须为应用程序池分配一个唯一名称。 根据使用应用程序池的应用程序的需要配置所有其他属性。
IIS 7.5 及更高版本中的新增功能
从 IIS 7.5 开始,可以使用 <add>
元素的 managedRuntimeLoader、CLRConfigFile 和 startMode 属性来配置应用程序自动启动。 这些属性分别配置为应用程序提供运行时加载的托管 DLL 名称、应用程序的公共语言运行时配置文件以及应用程序的启动类型。
IIS 7.5 及更高版本还为 <processModel>
元素的 identityType 属性新增了 ApplicationPoolIdentity
类型。 这种新的标识类型现在是应用程序的默认进程标识,可以设置内容区域的安全性,以允许特定应用程序池的访问。 为此,可以使用“IIS AppPool\DefaultAppPool”等语法,通过应用程序池的名称来设置安全性。此标识是动态创建的,因此大大减少了服务器的可攻击面。
兼容性
版本 | 说明 |
---|---|
IIS 10.0 | <add> 元素在 IIS 10.0 中未进行修改。 |
IIS 8.5 | <add> 元素在 IIS 8.5 中未进行修改。 |
IIS 8.0 | managedRuntimeVersion 属性的默认值已更改为 "" ,v4.0 已添加为 managedRuntimeVersion 的值。 |
IIS 7.5 | IIS 7.5 更新了 <applicationPools> 元素的 <add> 元素,以包含允许预加载应用程序的属性。 |
IIS 7.0 | IIS 7.0 中引入了 <applicationPools> 集合的 <add> 元素。 |
IIS 6.0 | <applicationPools> 集合替换了 IIS 6.0 IIsApplicationPools 元数据库属性的部分内容。 |
安装
在 IIS 7 及更高版本的默认安装中包含 <applicationPools>
集合。
操作方式
如何创建新应用程序池
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows 8 或 Windows 8.1:
- 按住 Windows 徽标键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:
- 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows Vista 或 Windows 7:
- 在任务栏上,单击“开始”,然后单击“控制面板”。
- 双击“管理工具”,然后双击“Internet Information Services (IIS)管理器”。
在“连接”窗格中,展开服务器名称,然后单击“应用程序池”。
在“操作”窗格中,单击“添加应用程序池...”。
在“添加应用程序池”对话框中,在“名称:”框中输入应用程序池的名称,在“.NET Framework 版本:”下拉列表中选择站点或应用程序使用的 .NET Framework 版本,在“托管管道模式:”下拉列表中选择“集成”或“经典”,然后单击“确定”。
如何为现有站点或应用程序配置应用程序池
- 在“连接”窗格中,展开“站点”,然后导航到要添加到应用程序池的网站或应用程序。
- 在“操作”窗格中,单击“高级设置...”
- 在“高级设置”对话框的“常规”部分,单击“应用程序池”条目,然后单击省略号按钮。
- 在“选择应用程序池”对话框中,从“应用程序池:”下拉列表框中选择应用程序池,单击“确定”,然后再次单击“确定”。
配置
<applicationPools>
集合的 <add>
元素可在 ApplicationHost.config 文件中的服务器级别进行配置。
特性
属性 | 说明 | ||||||||
---|---|---|---|---|---|---|---|---|---|
autoStart |
可选布尔属性。 如果为 true,向 World Wide Web 发布服务 (W3SVC) 指示应用程序池在创建时或 IIS 启动时应自动启动。 默认值为 true 。 |
||||||||
CLRConfigFile |
可选字符串值。 指定应用程序池的 .NET 配置文件。 注意:IIS 7.5 中添加了此属性。 没有默认值。 |
||||||||
enable32BitAppOnWin64 |
可选布尔属性。 如果为 True,则支持 32 位应用程序在运行 64 位 Windows 版本的计算机上运行。 默认值为 false 。 |
||||||||
enableConfigurationOverride |
可选布尔属性。 如果为 true,则指示将为此应用程序池中的应用程序处理 Web.config 文件中的委派设置。 如果为 false,则此应用程序池将忽略 Web.config 文件中的所有设置。 默认值为 true 。 |
||||||||
managedPipelineMode |
可选的枚举属性。 指定用于处理托管内容请求的请求处理模式。 managedPipelineMode 属性可以是下列可能的值之一。
Integrated 。 |
||||||||
managedRuntimeLoader |
可选的字符串属性。 指定要用于预加载应用程序池的托管加载程序。 注意:IIS 7.5 中添加了此属性。 默认值为 webengine4.dll。 |
||||||||
managedRuntimeVersion |
可选的字符串属性。 指定应用程序池使用的 CLR 版本。 managedRuntimeVersion 属性可以是以下可能的值之一。
"" 。 |
||||||||
name |
必需的字符串属性。 为服务器上的应用程序池指定一个唯一名称。 |
||||||||
passAnonymousToken |
可选布尔属性。 如果为 true,则 Windows Process Activation Service (WAS) 会为内置 IUSR 匿名用户帐户创建令牌并将其传递到匿名身份验证模块。 匿名身份验证模块使用该令牌模拟内置帐户。 如果 PassAnonymousToken 为 false,则不会传递令牌。 注意:IUSR 匿名用户帐户替代了 IIS_MachineName 匿名帐户。 IUSR 帐户可由 IIS 或其他应用程序使用。 在设置过程中,不会为其分配任何权限。 默认值为 true 。 |
||||||||
queueLength |
可选 uint 属性。 向 HTTP.sys 指示在拒绝未来的请求之前要在应用程序池中排队的请求数量。 默认值为 1000 。如果超出为此属性设置的值,IIS 会拒绝后续请求并显示 503 错误。 如果 loadBalancerCapabilities 设置为 true,则连接将关闭,而不是拒绝请求并指示 503 错误。 有关 loadBalancerCapabilities 的详细信息,请参阅应用程序池的故障设置。 |
||||||||
startMode |
可选的枚举值。 指定应用程序池的启动类型。 注意:IIS 7.5 中添加了此属性。 startMode 属性可以是以下可能值之一。
OnDemand 。 |
子元素
元素 | 说明 |
---|---|
cpu |
配置 CPU 相关性和 CPU 操作。 |
environmentVariables |
配置一个要传递给工作进程的环境变量集合。 |
failure |
配置在应用程序池失败时要执行的操作。 |
processModel |
配置应用程序池的进程管理属性。 |
recycling |
配置应用程序池回收。 |
配置示例
以下配置示例使用应用程序池 <add>
元素创建名为 Contoso 的新应用程序池。 <recycling>
元素配置应用程序池重启的日志记录,<periodicRestart>
元素配置应用程序池重启的时间,<processModel>
元素配置用于关闭和启动应用程序池中的工作进程的 shutdownTimeLimit 和 startupTimeLimit 属性,各配置为 30 秒。 如果超出这些时间限制,IIS 将终止工作进程。
<add name="Contoso">
<recycling logEventOnRecycle="Schedule">
<periodicRestart>
<schedule>
<clear />
<add value="03:00:00" />
</schedule>
</periodicRestart>
</recycling>
<processModel identityType="NetworkService" shutdownTimeLimit="00:00:30" startupTimeLimit="00:00:30" />
</add>
代码示例
下面的代码示例将名为 Contoso 的应用程序池添加到 IIS 7 及更高版本的服务器中,然后将应用程序池设置为每天在凌晨 3:00 回收。
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].recycling.periodicRestart.schedule.[value='03:00:00']" /commit:apphost
还可以使用以下语法:
appcmd.exe add apppool /name:"Contoso"
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].recycling.periodicRestart.schedule.[value='03:00:00']" /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 applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");
ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();
ConfigurationElement addElement = applicationPoolsCollection.CreateElement("add");
addElement["name"] = @"Contoso";
ConfigurationElement recyclingElement = addElement.GetChildElement("recycling");
ConfigurationElement periodicRestartElement = recyclingElement.GetChildElement("periodicRestart");
ConfigurationElementCollection scheduleCollection = periodicRestartElement.GetCollection("schedule");
ConfigurationElement addElement1 = scheduleCollection.CreateElement("add");
addElement1["value"] = TimeSpan.Parse("03:00:00");
scheduleCollection.Add(addElement1);
applicationPoolsCollection.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 applicationPoolsSection As ConfigurationSection = config.GetSection("system.applicationHost/applicationPools")
Dim applicationPoolsCollection As ConfigurationElementCollection = applicationPoolsSection.GetCollection
Dim addElement As ConfigurationElement = applicationPoolsCollection.CreateElement("add")
addElement("name") = "Contoso"
Dim recyclingElement As ConfigurationElement = addElement.GetChildElement("recycling")
Dim periodicRestartElement As ConfigurationElement = recyclingElement.GetChildElement("periodicRestart")
Dim scheduleCollection As ConfigurationElementCollection = periodicRestartElement.GetCollection("schedule")
Dim addElement1 As ConfigurationElement = scheduleCollection.CreateElement("add")
addElement1("value") = TimeSpan.Parse("03:00:00")
scheduleCollection.Add(addElement1)
applicationPoolsCollection.Add(addElement)
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST");
var applicationPoolsCollection = applicationPoolsSection.Collection;
var addElement = applicationPoolsCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "Contoso";
var recyclingElement = addElement.ChildElements.Item("recycling");
var periodicRestartElement = recyclingElement.ChildElements.Item("periodicRestart");
var scheduleCollection = periodicRestartElement.ChildElements.Item("schedule").Collection;
var addElement1 = scheduleCollection.CreateNewElement("add");
addElement1.Properties.Item("value").Value = "03:00:00";
scheduleCollection.AddElement(addElement1);
applicationPoolsCollection.AddElement(addElement);
adminManager.CommitChanges();
VBScript
Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection
Set addElement = applicationPoolsCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "Contoso"
Set recyclingElement = addElement.ChildElements.Item("recycling")
Set periodicRestartElement = recyclingElement.ChildElements.Item("periodicRestart")
Set scheduleCollection = periodicRestartElement.ChildElements.Item("schedule").Collection
Set addElement1 = scheduleCollection.CreateNewElement("add")
addElement1.Properties.Item("value").Value = "03:00:00"
scheduleCollection.AddElement(addElement1)
applicationPoolsCollection.AddElement(addElement)
adminManager.CommitChanges()