作者 :Saad Ladki

IIS 7 及更高版本中的配置系统与 API 级别的旧配置接口兼容。 它支持 (ABO) 接口(也称为 IMSAdminBase)以及 IIS 6.0 中基于 ABO 构建的 ADSI 和 WMI 提供程序的管理员基对象。 现有应用程序和脚本仍然可以调用 IIS 7.0 及更高版本上的这些编程接口,并且只要安装了 IIS 的元数据库兼容性组件即可继续工作

默认情况下,不安装此组件。

安装元数据库兼容性支持

可以在“Internet Information Services-Web> 管理工具 -> IIS 6.0 管理功能功能”下的“设置”中找到此组件。

默认情况下未安装此组件,因为 IIS 最初未设置为使用它。 旧接口有一些限制,不适合使用分布式配置文件 (请参阅下面的限制部分) ;因此,建议随着时间推移,特别是当打开配置系统进行越来越多的委派时, (即系统中存在越来越多的具有 IIS 设置的web.config文件) ,客户将考虑将旧脚本和应用程序移植到新系统及其接口。

还建议使用新接口开发新脚本和应用程序,以便它们与新系统完美配合工作,并且可以访问配置系统的新属性、概念和结构。

将所有旧脚本和应用程序移植到新接口时,建议卸载元数据库兼容性功能。

元数据库兼容性的工作原理

元数据库兼容性功能在元数据库服务 (IISADMIN) 中运行。 它截获对 ABO 的所有方法调用。 如果方法调用中的信息与 Web 服务器配置相关,则会将其映射到新系统。 如果它与 FTP、SMTP 或 NNTP 配置相关,则它遵循元数据库系统的常规逻辑,最终位于元数据库文件中。

请注意,即使 Web 服务器配置下的自定义属性也会映射到 (,并保留在新系统中) 。

映射决策基于有问题的元数据库节点。 Web 服务器配置通常处于 LM/W3SVC 下,包括自定义属性,并添加一些内容,例如 Mime Maps。

映射是为了在 ABO 视图和新系统视图之间来回转换。 例如,新系统在每个站点下以及所有虚拟目录下都有应用程序的概念。 旧系统以不同的方式处理应用程序:它们只是具有特殊属性的虚拟目录,用于将其标记为应用程序 (AppIsolated 或 AppRoot) 。

调用 ABO 以编写 Web 服务器配置时,元数据库兼容性组件会将数据保存在applicationHost.config中。这称为“写通”,因为信息不会保留在内存中。 调用 ABO 读取 Web 服务器配置时,元数据库兼容性组件将从applicationHost.config读取它。这称为“读通”,因为不会再次从内存中提取信息。

尚未准备好供服务器运行时使用的不完整数据将持久保存到 applicationHost.config 中称为 customMetadata 的特殊部分。 本部分用作元数据库兼容性功能的持久存储,客户不应修改其内容。 不完整数据的一个示例是,旧脚本设置站点 ID 而不是站点绑定。 在 IIS 6.0 中,此类调用会在配置中创建无效的站点对象。 在 IIS 7.0 及更高版本中,它保留在 服务器不使用的 节中。 如果后续调用来设置站点绑定,则站点对象被视为已完成,并完整地保存到 部分,服务器运行时将选取该部分。 此时会从中删除临时数据,因此用户无需清理系统中的剩余数据。 如果未进行此类后续调用,则服务器运行时将永远不会看到此无效站点,但旧脚本会在 ABO 视图中拥有它,就像在 IIS 6.0 中所做的那样。 从旧脚本的角度来看,系统在此处与 IIS 6.0 完全兼容。

通过旧脚本和应用程序设置的自定义 Web 服务器属性始终保留在 节中。 它们可以通过旧接口进行检索,就像在 IIS 6.0 中一样,因此系统完全兼容。 显然,这与扩展 IIS 配置系统的建议方法大相径庭,因此考虑随着时间的推移移植此类应用程序,以使用 IIS 7.0 及更高版本配置系统提供的新接口和新功能的另一个原因。

其他元数据库配置数据

请注意,FTP、SMTP 和 NNTP 配置仍保留在元数据库系统中,并且未移植到新的 IIS 配置系统。 这些设置的配置设置仍可通过旧式编程接口和直接编辑metabase.xml文件进行管理。

元数据库密钥和属性上的大多数操作无缝工作,用户会看到这些旧概念和名称,而不是配置节和命名属性等新 IIS 概念, (ABO 继续使用属性 ID;ADSI 继续使用旧属性名称) 。

旧用户仍然可以使用 ADSI 架构,甚至可以像在 IIS 6.0 上那样扩展它。

XML 文件兼容性

Web 服务器配置(包括扩展 Web 服务器的自定义配置)将持久化为system32\inetsrv\applicationHost.config,而不是metabase.xml。 因此,旧版支持在 API 级别,而不是在文件格式级别 (,这也是) 不支持某些旧功能的原因。 旧接口调用方将获取配置的“ABO 视图”,就像在 IIS 6.0 上一样,而不是新的文件格式、命名或概念。

一个含义是不支持元数据库 ACL 等概念。 这是因为它们与元数据库文件格式密切相关。 IIS 配置系统正在配置文件上利用标准文件 ACL。 系统不提供元数据库 ACL 与标准文件 ACL 之间的映射。

历史记录文件、备份/还原和导入/导出等功能的工作方式不同,因为它们依赖于新的配置系统。 因此,将忽略对备份配置的 ABO 调用。

旧版元数据库功能

配置审核已添加到 Windows Server® 2003 Service Pack 1 中的 IIS 6.0。 IIS 7.0 或更高版本当前不支持它,因为新配置系统的架构 (例如 IIS 7.0 及更高版本使用进程内配置系统,IIS 6.0 使用从用户代码封装的其他进程) 的专用 NT 服务。

旧版元数据库属性

仅支持旧属性。 IIS 7.0 及更高版本的配置属性不会返回到旧用户,.NET Framework 配置属性也不返回。

映射算法需要处理 IIS 6.0 和 IIS 7.0 及更高版本配置系统之间的差异。 例如,IIS 6.0 不要求站点具有名称 (“服务器注释”) ;如果为它们指定了名称,则无需让这些名称是唯一的。 在 IIS 7.0 及更高版本中,每个站点必须具有唯一的名称。 因此,将旧的 ServerComment 属性映射到新的 Name 属性并不简单。 映射算法强制每个站点的名称是唯一的,因为这是 IIS 7.0 及更高版本配置系统的要求;它通过向服务器注释添加数字来创建唯一性来执行此操作。 最终结果是,实际为服务器注释设置的值与脚本指定的值不同。

分布式配置

元数据库兼容性功能仅支持applicationHost.config。 web.config 文件中的配置不会返回到旧用户。 位置标记在 applicationHost.config 中使用,以支持按 URL 配置。