如何创建简单的 IIS 管理器模块

作者:Carlos Aguilar Mares

新的 IIS 7.0 及更高版本 Web 管理工具是一个可扩展的开发人员平台。 第三方可以开发和安装自己的管理功能,这些功能会在工具中显示为内置功能。 本文中演示的任务包括:

  • 在 Microsoft Visual Studio 或 Microsoft Visual C# Express 中创建项目,以便可以在 InetMgr 中使用该库
  • 创建简单的模块提供程序
  • 创建显示消息框的简单模块。

任务 1:创建项目

若要为 InetMgr 创建扩展性模块,必须创建一个 DLL 项目(也称为类库项目)。 该 DLL 需要强命名,以便可以在 GAC(全局程序集缓存)中注册,这是 InetMgr 使用的模块的要求。

  1. 单击“开始”,然后单击“程序”并运行 Microsoft Visual Studio 2005 或 Microsoft Visual C# 2005 学习版

  2. 在“文件”菜单中,选择“新建项目”选项。

  3. 在“新建项目”对话框中,选择“类库”作为项目类型,键入 ExtensibilityDemo 作为项目名称。 单击“确定”。

    Screenshot of the New Project window. The Class Library icon is selected.

  4. 使用解决方案资源管理器中的上下文菜单“删除”选项,删除默认添加的文件 Class1.cs(因为我们不会使用该文件)。

  5. 使用“项目”菜单中的“添加引用...”选项,使用“浏览”选项卡添加对 Microsoft.Web.Management.dll 的引用,并在 \Windows\system32\inetsrv 目录中搜索它。 这是一个 DLL,其中包含为 InetMgr 创建模块所需的所有扩展性类。

    由于我们将使用代码来创建基于 WinForms 的 UI,因此必须添加对 System.Windows.Forms.dll 的引用;为此,请再次使用“项目”菜单中的“添加引用”选项,在 .NET 程序集列表中选择 System.Windows.Forms.dll

    在 InetMgr 中使用库的要求之一是必须在 GAC 中将其注册。 确保 DLL 具有强命名(有时称为“已签名”)。 Visual Studio 提供了一种简单的方法来新建名称。 在“项目”菜单中选择“ExtensibilityDemo 属性”选项。

  6. 在“签名”选项卡上,选中“为程序集签名”复选框。

  7. 在组合框中,选择“<新建…>”选项以创建新密钥。 在“创建强名称密钥”对话框中,输入 DemoKey.snk 作为密钥名称,并取消选中“使用密码保护我的密钥文件”复选框。 单击“确定”。

    Screenshot of the Create Strong Name Key dialog.

    签名选项卡应如下所示:

    Screenshot of the signing tab.

    由于我们希望程序集位于 GAC 中,因此要添加一些生成后事件,以便每次编译时系统都会将程序集自动添加到 GAC 中。 这简化了调试工作,并支持在新增功能时进行更改。

  8. 选择“生成事件”选项卡,并添加以下“生成后事件”命令行:

    CALL "%VS80COMNTOOLS%\vsvars32.bat" > NULL
    gacutil.exe /if "$(TargetPath)"
    

    Screenshot of the Build Events tab.

    (可选)如果使用 Microsoft Visual Studio 2005,请正确设置调试,以便可以使用 F5 运行代码。 在项目属性中,选择“调试”选项卡并将其设置为启动外部程序,同时选择 \windows\system32\inetsrv\inetmgr.exe

    Screenshot of the debug tab.

  9. 关闭项目属性,然后在“文件”菜单中选择“全部保存”选项,并将位置设置为 d:\Demos。 单击“ 保存”。

    Screenshot of the Save Project dialog.

    现在,使用“生成”菜单下的“生成解决方案编译项目。 这会自动生成 DLL 并将其添加到 GAC 中。

    注意

    如果用于设置 vsvars32.bat 的命令不适用于错误代码 9009,请替换在步骤 8 的生成后事件中添加的命令,方法是将完整路径添加到 gacutil.exe,例如:

    "D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if "$(TargetPath)"
    

任务 2:创建模块提供程序

在此任务中,你将创建模块提供程序;这是 InetMgr 中模块注册的主要入口点。 Administration.config 中已列明这些模块提供程序。

  1. 从“项目”菜单中选择“添加新项”选项。 在“添加新项”对话框中,选择“类”模板,然后键入 DemoModuleProvider.cs 作为文件名。

    Screenshot of the Add New Item window. The Class icon is highlighted.

  2. 更改代码,使其如下所示:

    using System;
    using System.Security;
    using Microsoft.Web.Management.Server;
    namespace ExtensibilityDemo {
        class DemoModuleProvider : ModuleProvider {
            public override Type ServiceType {
                get { return null; }
            }
            public override ModuleDefinition GetModuleDefinition(IManagementContext context) {
                return new ModuleDefinition(Name, typeof(DemoModule).AssemblyQualifiedName);
            }
            public override bool SupportsScope(ManagementScope scope) {
                return true;
            }
        }
    }
    

此代码会创建一个 ModuleProvider,该模块支持所有类型的连接(服务器、站点和应用程序),并注册名为 DemoModule 的客户端模块。

任务 3:创建模块

在此任务中,你将了解如何创建模块。 模块是客户端中所有扩展性对象的主入口点。 它有一个名为 Initialize 的主方法。 所有操作均通过此方法来实现。

  1. 在“项目”菜单中选择“添加新项”选项。 选择类模板并键入 DemoModule.cs 作为文件名。

  2. 更改代码,使其如下所示:

    using System;
    using System.Windows.Forms;
    using Microsoft.Web.Management.Client;
    using Microsoft.Web.Management.Server;
    
    namespace ExtensibilityDemo {
        internal class DemoModule : Module {
            protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo) {
                base.Initialize(serviceProvider, moduleInfo);
                 MessageBox.Show("Hello World Inside InetMgr");
            }
        }
    }
    

任务 4:测试模块

在此任务中,你需添加生成的新模块。 为此,我们必须将其添加到 moduleProviders 列表中的 Administration.config 文件中。

首先,我们必须找出刚刚创建的程序集的全名。 其形式为“ExtensibilityDemo,Version=1.0.0.0,Culture=neutral,PublicKeyToken={YourKey}”。 使用 Windows 资源管理器进行查找。

  1. 打开 Windows 资源管理器并导航到 *Windows\Assembly* 文件夹。

  2. 在程序集列表中查找 ExtensibilityDemo,然后右键单击并选择“属性”。 对话框中会出现一个名为公钥令牌的字段;我们需要这个值将其注册到 InetMgr,因此将其复制到剪贴板。

    Screenshot of the Extensibility Demo Properties dialog.

  3. 返回 Microsoft Visual C# 2005 Express,选择“文件”菜单下的 “打开文件…”选项。 浏览寻找文件 \Windows\System32\InetSrv\Administration.config。

  4. 搜索 <moduleProviders> 部分并添加以下内容,但请确保将公钥令牌替换为我们在步骤 2 中复制的令牌:

    <moduleProviders>
      <add name="ExtensibilityDemo" type="ExtensibilityDemo.DemoModuleProvider, ExtensibilityDemo, 
                              Version=1.0.0.0, Culture=neutral, PublicKeyToken=bed679b1975c7f97" />
    <moduleProviders>
    

    注意

    通过仅将它添加到 moduleProviders 列表,你会注册该模块以仅用于服务器连接。 如果希望为站点连接和应用程序连接启用此模块,请将其添加到以下列表:

    <location path=".">
      <module>
        <add name="ExtensibilityDemo" />
    </location>
    
  5. 保存文件并运行 InetMgr,连接到 localhost,你会看到以下消息:

    Screenshot of the I I S start page showing the example message dialog.

总结

本文介绍了如何创建 Visual Studio 项目来为新的 IIS 管理工具开发扩展性模块。 我们创建了一个简单的 ModuleProvider 及其模块对应项以显示消息。

在了解了创建 IIS 管理工具模块的基础知识后,你可以探索更多可用于扩展性的有趣功能。