【问题标题】:How do you change the allowDefinition section attribute using appcmd in IIS 7?如何在 IIS 7 中使用 appcmd 更改 allowDefinition 部分属性?
【发布时间】:2010-10-17 19:34:43
【问题描述】:

是否可以使用 appcmd 来更改 allowDefinition 的值?具体来说,我尝试在应用程序级别启用对 httpCompression 模块的更改。

通过手动更改以下行来修改 applicationHost.config:

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

<section name="httpCompression" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />

然后允许我执行以下 appcmd 命令:

appcmd set config "website name" /section:httpCompression /noCompressionForProxies:false
appcmd set config "website name" /section:httpCompression /noCompressionForHttp10:false

但是我需要一个不依赖于手动编辑 applicationHost.config 的解决方案

【问题讨论】:

  • 你有没有办法使用 appcmd.exe 将 overrideModeDefault 设置为允许?

标签: iis iis-7 appcmd


【解决方案1】:

我的问题是,我必须将 anonymousAuthentication 从 False 更改为 True。当我这样做时: appcmd set config websitename /section:anonymousAuthentication /enabled:True

我得到的错误: 配置错误 此配置不能用于此路径。当该部分在父级锁定时会发生这种情况。默认情况下锁定是(overrideModeDefault="Deny")...

要解锁,请执行以下操作: appcmd unlock config /section:? 这将列出您想要的部分。然后输入:

appcmd 解锁配置 /section:system.webserver/security/authentication/anonymousauthentication

就是这样... :)

【讨论】:

  • 这对我来说不适用于 IIS7.5 或 IIS8。我可以很好地解锁配置部分(它不会给我一条错误消息),但是在站点级别应用任何更改都会失败,并出现上述相同的错误。
  • 添加-commit:apphost 会有所帮助
【解决方案2】:

尝试使用%windir%\system32\inetsrv\appcmd unlock config -section:*sectionName*。见http://blog.donnfelker.com/2007/03/26/iis-7-this-configuration-section-cannot-be-used-at-this-path/

在发布此答案后,我实际上遇到了这样做的需要。

%systemroot%\System32\inetsrv\appcmd.exe unlock config /section:system.WebServer/[rest of the path to config section you need to edit]

【讨论】:

    【解决方案3】:

    一个重要的警告,你不应该改变allowDefinition,这是一个重要的设置,通常是有原因的,例如,即使你将它设置在特定的目录或应用程序中它也可能不起作用,所以开发人员已指定。

    所以请不要修改节定义中的allowDefinition 属性。另一方面,您可以修改 overrideModeDefault 这将允许用户在定义允许的情况下在不同的位置定义它。

    【讨论】:

    • 我没有参考资料,但相信我,你不想这样做:)。作为示例,我们将带有 allowDefinition 的模块部分添加到 MachineToApp,如果您将其更改为“无处不在”,那仍然无法正常工作,因为模块需要每个应用程序而不是文件夹(因此尽管配置有效,但运行时行为不会工作)。几乎所有设置也是如此。这就是为什么我们发明了 overrideModeDefault 值以便可以更改它,但更重要的是推荐的方法是使用位置路径和 overrideMode。