IIS 7配置路径

时间:2011-01-24 01:41:32

标签: iis configuration iis-7 metabase

我正在尝试使我的c ++ ahadmin应用程序与IIS 7兼容。我的应用程序需要读取网站配置(通过IIS 6中的配置数据库属性)。

我阅读了很多关于配置路径的文章,我想我对它是如何工作有很好的了解 - 但是我不确定一件事:

要进行配置,我可以提交MACHINE / WEBROOT / APPHOST /路径或MACHINE / WEBROOT / APPHOST /默认网站。

我理解后者是指特定网站的实际web.config,前者是指一般applicationHost.config文件,其中设置了常规设置。

我的应用程序不知道是否存在web.config文件。

我的问题:如果我想要走这条路 - Object.ConfiguredObject.Site.Bindings,我是否需要提交APPHOST路径或APPHOST/Default Web Site路径?

我怎么知道在运行时?

2 个答案:

答案 0 :(得分:1)

您将始终将绑定提交到MACHINE/WEBROOT/APPHOST

您应该查看以下架构文件:

  

%systemroot%\System32\inetsrv\config\schema

它们将帮助您确定设置应属于哪个位置。

<强>更新

根据你的评论:

  

例如,AccessSSLFlags会   被映射到   ConfigurationSection.AccessSection.SslFlags    - 在这种情况下,我会提交哪一节?我怎么知道我的哪个部分   需要提交吗?

一切都取决于。 IIS7支持名为Feature Delegation的机制。如果委派了某项功能,则表示用户可以在其本地web.config中配置该功能。某些功能在system.webServer下配置,其他功能system.web

用户在web.config本地可以配置和无法配置的内容由两个文件中的条目控制:

%systemrooot%\system32\inetsrv\config\administration.config
%systemrooot%\system32\inetsrv\config\applicationHost.config

如果您在以下位置查看IIS7配置架构:

  

%systemroot%\System32\inetsrv\config\schema\IIS_schema.xml

你会发现有两种主要类型的部分:

  

system.applicationHost/xxxx
  system.webServer/xxxx

system.applicationHost下可配置的任何内容通常都不被视为用户可修改的配置项。事实上,如果您打开applicationHost.config,您会看到:

<sectionGroup name="system.applicationHost">
  <section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
</sectionGroup>

注意allowDefinition="AppHostOnly"?这基本上告诉您无法在web.config中配置这些设置。

功能委托的工作范围太宽,无法在答案中涵盖,所以我建议你阅读上面链接的文章。

答案 1 :(得分:1)

听起来您正在尝试构建一个通用工具来管理配置,因此您可能需要考虑遵循IIS Manager遵循的类似模式;简而言之,它总是试图将配置保存到最深的路径。这意味着它总是通过查看部分是否被锁定将其提交到可以的地方。它使用托管代码(Microsoft.Web.Administration),但您可以使用AppHostElement.GetMetadata(“isLocked”)从C ++访问相同的数据。 顺便说一句,如果你使用C ++,我强烈建议直接使用AHADMIN(而不是WMI或其他任何东西),特别是IAppHostWritableAdminManager

因此,该算法将CommitPath设置为与指定的GetAdminSection配置路径相同的值。然后检查IsLocked,如果是,则删除最后一个“路径部分”(修剪开始最后一个'/'),然后再次读取,直到找到该部分解锁的位置。这是您可以保存它的最深处。此外,如果是system.web部分,则需要在某些时候切换到MACHINE / WEBROOT。 IsLocked将尊重Section Definition允许位置和其他所需的东西。如果你想让它成为防弹,你甚至需要检查属性级锁定,但我认为这是非常先进的。