IIS 7.0 的 MWA 和 MWM 概述

作者:Janani Ravi

摘要

扩展 IIS 管理器工具来管理 IIS 7.0 及更高版本服务器上的自定义配置(在分布式配置文件中)涉及到使用两个不同程序集(Microsoft.Web.Administration.dll 和 Microsoft.Web.Management.dll)中的 API。 应将这些 API 用于差别很大的操作,它们的用途在根本上不同。 本文档简要概述了这些 API 提供的功能以及它们之间的关系。

介绍

如果你打算将 UI 添加到 IIS 管理器 (InetMgr) 以管理服务器配置文件上的自定义设置,需要使用 Microsoft.Web.Administration.dll 和 Microsoft.Web.Management.dll 中的 API。 这些程序集中的 API 提供的功能在根本上不同,首次使用它们的开发人员可能会感到困惑。 本文将简要概述每个程序集的功能。

什么是 Microsoft.Web.Administration 和 Microsoft.Web.Management?

本部分对其中每个程序集进行简要介绍。

Microsoft.Web.Administration

Microsoft.Web.Administration (MWA) API 生成为应用程序主机管理 API (AHADMIN)(一个本机代码接口库)上的托管代码包装器。 使用它能够以编程方式访问和更新 Web 服务器配置和管理信息。

Microsoft.Web.Administration.dll 是可让用户调整服务器上的设置的简便方式。 它支持添加任何 UI 扩展性或功能。 事实上,IIS 管理器中的多个 UI 功能都使用此 API 来管理后端的配置设置。

当开发人员想要用托管代码(C#、VB 等)编写程序,以按特定顺序配置服务器时,可以使用 MWA API。 可以从独立控制台应用程序或从 IIS 管理器的 UI 功能内部使用此 API。

这些 API 还支持在运行时访问配置(例如,从 IIS 管道中的托管模块)。

Microsoft.Web.Management

Microsoft.Web.Management.dll 提供一个框架用于向 IIS 管理器工具添加新的 UI 功能。 该框架提供扩展性用于开发新功能,并提供基类和其他功能。 这样,用户定义的扩展便可以成为 UI 中的一等公民,并且它们的外观与内置 IIS 和 ASP.Net 功能相同。

IIS 管理器具有模块化基础结构,其中每个 UI 功能都是其自身的实体,并且必须使用该工具单独注册。 IIS 管理器的客户端-服务器体系结构将操作服务器设置的逻辑与代码相隔离。 它会以用户友好的方式显示这些设置。 该工具中的每个功能都遵循这种客户端-服务器范式。 这是通过在 IIS 管理器中为服务器端和客户端 UI 代码提供定义明确的基类来强制实施的。

此 API 还提供了扩展性机制用于开发 UI 功能,这些功能以列表、属性网格、自定义设计的“操作”窗格、模式向导和对话框(还有更多)的形式表示。

该工具随附的许多现有 UI 功能都使用 MWA API(在服务器端代码中)来访问配置。

Microsoft.Web.Administration

如前所述,MWA API 可用于操作服务器上的设置。 它们提供对为 IIS 配置的网站、应用程序和虚拟目录的内置强类型访问。 这些 API 还允许用户生成自己的强类型类来表示特定的配置部分,从而建立一种简单的方法来访问存储在这些部分中的属性和其他信息。

此列表并不详尽,此程序集提供的功能远远超过此处所述。

ServerManager 和网站、应用程序与虚拟目录

用于管理服务器属性的入口点是 ServerManager 类。 ServerManager 包含对该 IIS 服务器上所有网站的列表的引用,对单个网站的访问方式是在网站集合中编制索引。

对应用程序和虚拟目录的访问方式与此类似。 这些实体还提供运行时状态信息(例如网站是否已启动/停止)。 对整个服务器的默认设置或属于单个实体的属性进行更新(例如对特定网站进行更新)。

在 ServerManager 上调用 CommitChanges 时,服务器设置会更新。

下面是该程序集提供的一些强类型类的概述:

Diagram showing connections between the ServerManager class and other classes.

访问单个配置文件

IIS 使用的分布式配置文件模型允许网站、应用程序、虚拟目录甚至文件夹将其配置放在 web.config 文件中。

可以访问单个配置文件以调整特定实体的设置。 ServerManager 方法 GetApplicationHostConfiguration 用于访问 applicationHost.config,而方法 GetWebConfiguration 接受参数以获取特定配置文件。

扩展性的泛型基类

IIS 配置系统允许创建一个部分,在其中可以指定与应用程序相关的属性。 使用 MWA API,在托管代码中创建强类型类以操作这些设置。 一些有助于简化此操作的基类包括:

  • Configuration:表示单个配置文件(applicationHost.config 或者网站和应用程序的 web.config 文件)
  • ConfigurationElement:用于表示配置文件中的元素的泛型实体。 这是配置部分、集合条目、部分中嵌套元素等的基类。
  • ConfigurationAttribute:表示 ConfigurationElement 中的属性
  • ConfigurationSection:派生自 ConfigurationElement,表示 IIS 架构文件中定义的部分。 用于访问部分的各种属性。
  • ConfigurationElementCollection:由 ConfigurationElements 组成的集合类。 也派生自 ConfigurationElement。

下面是泛型配置扩展性的简单概述:

Diagram showing connections in a generic configuration.

对配置进行运行时访问

WebConfigurationManager 用于对服务器的配置设置进行运行时访问。 加载到 IIS 管道中的托管模块通过引用此类来访问其特定上下文中的配置设置(例如,对特定网站的请求)。

Microsoft.Web.Management

Microsoft.Web.Management (MWM) API 是用于开发服务器端代码以操作管理设置和客户端用户界面功能(允许用户以友好的方式查看和操作这些设置)的构建基块。

下面提供了每个命名空间中一些重要类的简要说明。 再次强调,此列表并不详尽,此程序集提供的功能远远超过此处所述。

此程序集提供的功能的概要视图:

Screenshot showing lists of classes in namespaces.

Microsoft.Web.Management.Server

ModuleProvider 基类派生的类构成了供 IIS 管理器用来识别 UI 模块的入口点。 必须在 Administration.config 中注册此类,IIS 管理器才能将其显示为功能集的一部分。

ModuleService 基类派生的类构成了服务器端管理的核心。 这些类执行实际的服务器设置操作。 类中必须对 UI 客户端可见的方法用 ModuleServiceMethod 属性进行标记。

ManagementUnit 为开发人员提供管理服务器的上下文。 例如,SiteManagementUnit 和 ApplicationManagementUnit 对应于 IIS 管理器工具中的网站连接和应用程序连接。 ModuleService 基类公开当前的、可用于访问有关当前上下文的信息的 ManagementUnit。

ManagementConfigurationPath 是一个表示路径(指向当前服务器、网站、应用程序或文件夹)的类。 如果你正在管理网站,则此类会保存网站名称和有关该网站的其他相关信息。 ManagementUnit 公开当前的 ManagementConfigurationPath。

ManagementConfiguration 是一个帮助器类,用于访问和操作服务器上的配置设置。 这是之前定义的 MWA API 中 Configuration 类的一个非常强大的抽象,可用于查询部分,而不必关心这些部分是在 applicationHost.config 中还是在根 web.config 中定义的。

PropertyBag 是一种容器,用于保存在客户端和服务器之间传输的信息。 这是作为泛型字典实现的。在远程管理服务器的情况下传输数据时,该字典将序列化为字符串。

Microsoft.Web.Management.Client

Module 基类派生的类构成了供功能用来注册其 UI 组件的入口点。 这会指示此模块的 UI 是页面(显示在 IIS 管理器的中心窗格中)、树中的节点,还是“操作”窗格中的简单任务(仅列出了几个示例)。

ModuleServiceProxy 是方法存根的基类,用于访问服务器上 ModuleService 中指定的实际服务方法。

HierarchyInfo 表示树视图中的节点,支持对该节点执行多种操作。

Connection 类包含当前管理会话(用于定义与服务器、网站或应用程序的连接的管理会话)的所有上下文信息。 它提供帮助器来访问服务、创建代理等。

TaskItem 是添加到 IIS 管理器的“操作”窗格中的任务的基类。 MethodTaskItemTextTaskItem 等类派生自该基类,并在“操作”窗格中显示链接、标签、警报和其他信息。 开发人员无需编写任何额外的 UI 代码即可显示这些操作。

Microsoft.Web.Management.Client.Win32

ModulePage 是在 IIS 管理器工具中心窗格中显示“页面”的所有功能的基类。 ModuleListPage、ModuleDialogPage 和 ModulePropertiesPage 等类均派生自 ModulePage。 这些基类提供了一种简单方式用于开发可显示列表、对话框和属性网格的页面。

TaskForm 基类使开发人员能够创建显示为模式对话框的窗体。

WizardForm 构成了所有对话框的基类。 开发人员可以指定多个要插入向导中的 WizardPage 派生类。

Microsoft.Web.Management.Client.Extensions

此命名空间中的类使用 IExtensibilityManager 提供客户端扩展性。 例如,AuthenticationFeature 提供了任务来处理 InetMgr 工具的身份验证功能中的每个条目。

这是 Microsoft.Web.Administration 和 Microsoft.Web.Management API 为希望扩展配置和 UI,以添加自己功能的开发人员提供的功能的简要概述。 有关配置扩展性和 UI 扩展性工作原理的更深入介绍,请参阅与这些主题相关的每篇文章。