使用配置编辑器:生成脚本

作者:Crystal Hoyer

演练目标

本演练旨在演示如何通过应用程序池生成示例使用配置编辑器的“生成脚本”功能。

先决条件

本演练要求满足以下先决条件:

第 1 部分 - 使用配置编辑器创建应用程序池

  1. 通过双击服务器连接中的“配置编辑器”功能,在 IIS 管理器中启动配置编辑器。

  2. 在“部分:”下拉菜单中,单击 system.applicationHost -> applicationPools

  3. 在下面显示的属性网格中,单击第一行上的省略号“…”,它对应的是“(集合)”项。

  4. 在“集合编辑器”中,你将看到已存在的应用程序池的列表。

  5. 在“操作”窗格上,单击“添加”

  6. 填写“属性”部分中显示的属性网格。

    1. 请注意,“name”属性具有带符号的键。 这表示必填字段。 输入“applicationPool1”作为名称来创建新的应用程序池。
    2. 选择要展开的 processModel。
    3. 将 userName 设置为“PoolId1”
    4. 将密码设置为“PoolId1Pwd”
    5. 将 identityType 更改为“SpecificUser”
    6. 可以选择在此处更改其他设置
  7. [可选] 若要将更改提交到配置系统,请单击“操作”窗格中的“应用”。 但是,出于演练的目的,请不要这样做。

第 2 部分 - 生成脚本

关闭“属性”对话框后,单击“操作”窗格中的“生成脚本”链接。 “脚本”对话框的 3 个选项卡显示 3 种类型的脚本,用于完成我们在本部分中执行的操作。

托管代码:用于创建“applicationPool1”的 C# 代码片段

using System;
using Microsoft.Web.Administration;

internal static class Sample {

    private static void Main() {

    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"] = @"applicationPool1";

    ConfigurationElement processModelElement = addElement.ChildElements["processModel"];
    processModelElement["identityType"] = @"SpecificUser";
    processModelElement["userName"] = @"PoolId1";
    processModelElement["password"] = @"PoolId1Pwd";
    applicationPoolsCollection.Add(addElement);

    serverManager.CommitChanges();
    }
}

脚本:用于创建“applicationPool1”的 JScript 代码

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 = "applicationPool1";
var processModelElement = addElement.ChildElements.Item("processModel");
processModelElement.Properties.Item("identityType").Value = "SpecificUser";
processModelElement.Properties.Item("userName").Value = "PoolId1";
processModelElement.Properties.Item("password").Value = "PoolId1Pwd";
applicationPoolsCollection.AddElement(addElement);

adminManager.CommitChanges();

命令行:用于创建“applicationPool1”的 Appcmd 命令并指定标识。

appcmd.exe set config -section:system.applicationHost/applicationPools /+".[name='applicationPool1']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /.[name='applicationPool1'].processModel.identityType:"SpecificUser" /.[name='applicationPool1'].processModel.userName:"PoolId1" /.[name='applicationPool1'].processModel.password:"PoolId1Pwd" /commit:apphost

第 3 部分 - 创建一个 C# 程序来创建 10 个应用程序池

根据配置编辑器生成的代码,我们将重构代码,将一个应用程序池创建到方法“CreateApplicationPool”。 最终代码如下所示:

using System;
using Microsoft.Web.Administration;
 
internal static class Sample {
  private static void Main() {
  ServerManager serverManager = new ServerManager();
Configuration config = serverManager.GetApplicationHostConfiguration();
 
ConfigurationSection applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");
 
ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();
 
for (int i = 0; i < 10; i++) {
CreateApplicationPool(applicationPoolsCollection,
"AppPool" + i.ToString(),
  "AppPoolId" + i.ToString(),
"AppPoolPwd" + i.ToString());
}
serverManager.CommitChanges();
}
 
private static void CreateApplicationPool(ConfigurationSection applicationPoolsSection,
string appPoolName,
string appPoolUserName,
string appPoolPassword) 
{
  ConfigurationElement addElement = applicationPoolsCollection.CreateElement("add");
addElement["name"] = appPoolName;
 
ConfigurationElement processModelElement = addElement.ChildElements["processModel"];
processModelElement["identityType"] = @"SpecificUser";
processModelElement["userName"] = appPoolUserName;
processModelElement["password"] = appPoolPassword;
applicationPoolsCollection.Add(addElement);
}
}

总结

现在你已经创建了代码,以在配置编辑器的帮助下创建 10 个应用程序池。