以编程方式编辑IIS站点

时间:2015-09-17 09:29:35

标签: c# asp.net iis

在IIS上,我有一个网站,我希望编辑SslFlags。

我希望在站点级别的web.config中设置这些标志,而不是applicationHost.config。

通过在web.config中声明访问部分,并通过使用以下元素编辑applicationHost.config来允许覆盖访问部分,我设法让IIS的UI按预期运行:

<section name="access" overrideModeDefault="Allow" />

通过UI编辑SslFlags将按预期编辑web.config文件。该部分未锁定,并且考虑了被覆盖的值。

但是,当使用Microsoft.Web.Administration程序集通过使用以下代码读取和编辑这些标志时,在读取和编辑时,所考虑的值都是applicationHost.config的值。

在第一个例子中,我使用GetWebConfiguration来获取配置。

var serverManager = ServerManager.OpenRemote(serverName);
// Try with GetWebConfiguration
Configuration config = serverManager.GetWebConfiguration(sitename);
ConfigurationSection accessSection = config.GetSection(
                                             "system.webServer/security/access",
                                             sitename);

同样适用于我使用GetApplicationHostConfiguration检索配置:

config = serverManager.GetApplicationHostConfiguration();            
accessSection = config.GetSection(
                        "system.webServer/security/access",
                        sitename);

我觉得我在这里遗漏了一些明显的东西,但我似乎无法在Web.config中访问SslFlags的值,我该如何实现呢?

1 个答案:

答案 0 :(得分:2)

我建议的第一件事是只解锁要允许覆盖值的特定网站或应用程序的部分。为此,您可以使用AppCmd.exe轻松完成,例如:

C:\Windows\System32\inetsrv\appcmd.exe unlock config "Default Web Site/" /section:system.webServer/security/access -commit:apphost

完成后,您可以使用以下代码:

using(ServerManager serverManager = new ServerManager()) { 
    Configuration config = serverManager.GetWebConfiguration("Default Web Site");

    ConfigurationSection accessSection = config.GetSection("system.webServer/security/access");
    accessSection["sslFlags"] = @"SslRequireCert";

    serverManager.CommitChanges();
}