如何创建简单的 IIS 管理器模块
新的 IIS 7.0 及更高版本 Web 管理工具是一个可扩展的开发人员平台。 第三方可以开发和安装自己的管理功能,这些功能会在工具中显示为内置功能。 本文中演示的任务包括:
- 在 Microsoft Visual Studio 或 Microsoft Visual C# Express 中创建项目,以便可以在 InetMgr 中使用该库
- 创建简单的模块提供程序
- 创建显示消息框的简单模块。
任务 1:创建项目
若要为 InetMgr 创建扩展性模块,必须创建一个 DLL 项目(也称为类库项目)。 该 DLL 需要强命名,以便可以在 GAC(全局程序集缓存)中注册,这是 InetMgr 使用的模块的要求。
单击“开始”,然后单击“程序”并运行 Microsoft Visual Studio 2005 或 Microsoft Visual C# 2005 学习版
在“文件”菜单中,选择“新建项目”选项。
在“新建项目”对话框中,选择“类库”作为项目类型,键入 ExtensibilityDemo 作为项目名称。 单击“确定”。
使用解决方案资源管理器中的上下文菜单“删除”选项,删除默认添加的文件 Class1.cs(因为我们不会使用该文件)。
使用“项目”菜单中的“添加引用...”选项,使用“浏览”选项卡添加对 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 属性”选项。
在“签名”选项卡上,选中“为程序集签名”复选框。
在组合框中,选择“<新建…>”选项以创建新密钥。 在“创建强名称密钥”对话框中,输入 DemoKey.snk 作为密钥名称,并取消选中“使用密码保护我的密钥文件”复选框。 单击“确定”。
签名选项卡应如下所示:
由于我们希望程序集位于 GAC 中,因此要添加一些生成后事件,以便每次编译时系统都会将程序集自动添加到 GAC 中。 这简化了调试工作,并支持在新增功能时进行更改。
选择“生成事件”选项卡,并添加以下“生成后事件”命令行:
CALL "%VS80COMNTOOLS%\vsvars32.bat" > NULL gacutil.exe /if "$(TargetPath)"
(可选)如果使用 Microsoft Visual Studio 2005,请正确设置调试,以便可以使用 F5 运行代码。 在项目属性中,选择“调试”选项卡并将其设置为启动外部程序,同时选择 \windows\system32\inetsrv\inetmgr.exe。
关闭项目属性,然后在“文件”菜单中选择“全部保存”选项,并将位置设置为 d:\Demos。 单击“ 保存”。
现在,使用“生成”菜单下的“生成解决方案”编译项目。 这会自动生成 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 中已列明这些模块提供程序。
从“项目”菜单中选择“添加新项”选项。 在“添加新项”对话框中,选择“类”模板,然后键入 DemoModuleProvider.cs 作为文件名。
更改代码,使其如下所示:
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 的主方法。 所有操作均通过此方法来实现。
在“项目”菜单中选择“添加新项”选项。 选择类模板并键入 DemoModule.cs 作为文件名。
更改代码,使其如下所示:
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 资源管理器进行查找。
打开 Windows 资源管理器并导航到 *Windows\Assembly* 文件夹。
在程序集列表中查找 ExtensibilityDemo,然后右键单击并选择“属性”。 对话框中会出现一个名为公钥令牌的字段;我们需要这个值将其注册到 InetMgr,因此将其复制到剪贴板。
返回 Microsoft Visual C# 2005 Express,选择“文件”菜单下的 “打开文件…”选项。 浏览寻找文件 \Windows\System32\InetSrv\Administration.config。
搜索 <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>
保存文件并运行 InetMgr,连接到 localhost,你会看到以下消息:
总结
本文介绍了如何创建 Visual Studio 项目来为新的 IIS 管理工具开发扩展性模块。 我们创建了一个简单的 ModuleProvider 及其模块对应项以显示消息。
在了解了创建 IIS 管理工具模块的基础知识后,你可以探索更多可用于扩展性的有趣功能。