IIS 7配置路径

我正在尝试使我的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
路径? 我怎么知道在运行时?     
已邀请:
您将始终将绑定提交到
MACHINE/WEBROOT/APPHOST
。 你应该去看一下架构文件:   
%systemroot%System32inetsrvconfigschema
它们将帮助您确定设置应属于何处。 更新: 根据你的评论:   例如,AccessSSLFlags会   被映射到   ConfigurationSection.AccessSection.SslFlags    - 在这种情况下,我会提交哪一节?我怎么知道我的哪个部分   需要承诺? 这完全取决于。 IIS7支持一种称为特征委派的机制。如果委派了某项功能,则表示用户可以在其本地
web.config
中配置该功能。某些功能配置在
system.webServer
,其他功能
system.web
。 用户可以和不能在他/她的本地配置的内容由两个文件中的条目控制:
%systemrooot%system32inetsrvconfigadministration.config
%systemrooot%system32inetsrvconfigapplicationHost.config
如果你去看看IIS7配置架构:   
%systemroot%System32inetsrvconfigschemaIIS_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
中配置。 功能委托的工作范围太宽,无法在答案中涵盖,所以我建议你阅读上面链接的文章。     
听起来您正在尝试构建一个通用工具来管理配置,因此您可能需要考虑遵循IIS管理器遵循的类似模式;简而言之,它总是试图将配置保存到最深的路径。这意味着它总是通过查看部分是否被锁定将其提交到可以的地方。它使用托管代码(Microsoft.Web.Administration),但您可以使用AppHostElement.GetMetadata(“isLocked”)从C ++访问相同的数据。 顺便说一句,如果你使用C ++,我强烈建议直接使用AHADMIN(而不是WMI,或其他任何东西),特别是IAppHostWritableAdminManager。 因此,该算法将CommitPath设置为与指定的GetAdminSection配置路径相同的值。然后检查IsLocked,如果是,则删除最后一个“路径部分”(修剪开始最后一个'/'),然后再次读取,直到找到该部分解锁的位置。这是您可以保存它的最深处。此外,如果是system.web部分,则需要在某些时候切换到MACHINE / WEBROOT。 IsLocked将尊重Section Definition允许位置和其他所需的东西。如果你想让它成为防弹,你甚至需要检查属性级锁定,但我认为这是非常先进的。     

要回复问题请先登录注册