将IIS应用程序池设置还原为应用程序默认值

时间:2015-06-01 13:59:18

标签: asp.net iis

最新版本的IIS允许设置应用程序池默认值,该应用程序池默认值适用于应用程序池的所有未更改设置,并在applicationHost.config中写入标记。 我找不到有关如何将应用程序池重置为默认值或强制将默认值重新应用于应用程序池覆盖自定义设置的信息。 对于其他类型的设置,有一个“恢复到父级”操作,将设置恢复为默认值,对于应用程序池默认值也有类似的内容? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

遗憾的是,AFAIK没有简单的编程方式来实现这一点,applicationPools部分是那些具有默认值(applicationPoolDefaults)的特殊部分之一,因为它是一个集合,你当然不希望将它重置为父集合,因为那样擦除所有应用程序池。想法是你要删除已设置的所有属性和元素,并且很容易在c:\ windows \ system32 \ inetsrv \ config \ applicationHost.config中查找,所以你可以查看那里,你会看到很容易哪些是最重要的价值观。您还将很快发现,重置值不是正确的,因为您最终会更改.NET的版本或身份或某些可能在每个应用程序上实际正确设置的内容。例如,在我的情况下,您可以看到BizTalk适配器正在更改某些值,如identityType和其他。你可以删除所有值(名称除外),这真的会将值重置为applicationPoolDefaults:

    <applicationPools>
        <add name="DefaultAppPool" managedRuntimeVersion="v4.0" />
        <add name=".NET v4.5 Classic" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" />
        <add name=".NET v4.5" managedRuntimeVersion="v4.0" />
        <add name="Classic .NET AppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" />
        <add name=".NET v2.0 Classic" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" />
        <add name=".NET v2.0" managedRuntimeVersion="v2.0" />
        <add name="BizTalk Adapter AppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" startMode="AlwaysRunning">
            <processModel identityType="NetworkService" />
        </add>

如果您对C#感到满意,我建议您使用Microsoft.Web.Administration之类的东西来查看实际设置的内容并重置 你感觉很舒服,类似下面的代码片段就可以解决这个问题,如果您想要在记事本中打开文件而不是打开记事本中的文件,那么您可以使用MWA的远程功能来远程监控服务器:

    static void Main(string[] args)
    {
        ServerManager mgr = new ServerManager();

        foreach (var pool in mgr.ApplicationPools)
        {
            Console.WriteLine(pool.Name);
            IterateElement(pool, "\t");
            Console.WriteLine();
        }
    }

    private static void IterateElement(ConfigurationElement configElement, string indent)
    {
        foreach (var attribute in configElement.Attributes)
        {
            if (!attribute.IsInheritedFromDefaultValue && (bool)attribute.GetMetadata("isPresent"))
            {
                Console.WriteLine("{0}'{1}'='{2}'", indent, attribute.Name, attribute.Value);
            }
        }

        foreach (var child in configElement.ChildElements)
        {
            if (child.IsLocallyStored)
            {
                Console.WriteLine("{0}<{1}>", indent, child.Schema.Name);
                IterateElement(child, indent + "\t");
            }
        }
    }