与 IIS 7 及更高版本的元数据库兼容性

作者:Saad Ladki

介绍

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

注意

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

安装元数据库兼容性支持

可以在 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 级别,而不是文件格式级别(这也是不支持某些旧功能的原因)。 旧接口调用方将像在 IIS 6.0 上那样获取配置的“ABO 视图”,而不是新的文件格式或命名或概念。

一个可能的影响是,不支持元数据库 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 配置。