IIS 7配置路径
我想让我的C++ ahadmin应用程序与IIS 7兼容。我的应用程序需要读取网站配置(通过IIS 6中的元数据库属性)。IIS 7配置路径
我读了很多关于配置的路径文章,我想我有它是如何工作的一个好主意 - 但是我不知道一两件事:
要到配置,我可以承诺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%\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
中配置。
功能委派如何工作的范围太广,无法覆盖答案,所以我建议您阅读上面链接的文章。
听起来好像您正在尝试构建通用工具来管理配置,因此您可能需要考虑遵循IIS管理器所遵循的类似模式;总之,它总是试图将配置保存到尽可能最深的路径。这意味着它将始终通过查看该部分是否被锁定来将其提交到可能的位置。它使用托管代码(Microsoft.Web.Administration),但可以使用AppHostElement.GetMetadata(“isLocked”)从C++访问相同的数据。顺便说一下,如果你使用C++,我会强烈建议直接使用AHADMIN(而不是WMI,或其他任何东西),尤其是IAppHostWritableAdminManager。
因此,该算法会将CommitPath设置为与指定的GetAdminSection配置路径相同的值。然后检查IsLocked,如果是,然后删除最后一个“路径部分”(修剪开始最后一个'/'),并再次阅读,直到找到该部分解锁的地方。这是你可以保存它的最深处。另外,如果它是system.web部分,则需要在某个时刻切换到MACHINE/WEBROOT。 IsLocked将尊重部分定义允许位置和其他必需的事物。如果你想做出防弹你甚至需要检查属性级锁定,但我认为这是相当先进的。
再次感谢您的回复。我指定绑定作为示例 - 但我希望能够支持映射到IIS配置路径的所有元数据库属性。因此,例如,AccessSSLFlags将被映射到ConfigurationSection.AccessSection.SslFlags - 在那种情况下我会提交哪一部分?我如何知道我需要提交哪一部分? – Ron 2011-01-24 05:00:01
@龙 - 你想要达到的究竟是什么? – Kev 2011-01-24 10:26:06