単純な IIS マネージャー モジュールを作成する方法

作成者: Carlos Aguilar Mares

新しい IIS 7.0 以降の Web 管理ツールは、拡張可能な開発者プラットフォームです。 サード パーティは、ツールで最上位の機能として表示される独自の管理機能を開発してインストールできます。 この記事で説明するタスクは次のとおりです。

  • ライブラリを InetMgr 内で使用できるように、Microsoft Visual Studio または Microsoft Visual C# Express でプロジェクトを作成する
  • シンプルなモジュール プロバイダーの作成
  • メッセージ ボックスを表示するシンプルなモジュールを作成します。

タスク 1: プロジェクトの作成

InetMgr の機能拡張モジュールを作成するには、クラス ライブラリ プロジェクトとも呼ばれる DLL プロジェクトを作成する必要があります。 この DLL は、InetMgr で使用されるモジュールの要件である GAC (グローバル アセンブリ キャッシュ) に登録できるように、厳密な名前を付ける必要があります。

  1. [スタート] をクリックし、[プログラム] をクリックして、[Microsoft Visual Studio 2005 または Microsoft Visual C# 2005 Express Edition] を実行します。

  2. [ファイル] メニューで、[新しいプロジェクト] オプションを選択します。

  3. [新しいプロジェクト] ダイアログで、プロジェクトの種類として [クラス ライブラリ] を選択し、プロジェクトの名前として「ExtensibilityDemo」と入力します。 OK をクリックします。

    [新しいプロジェクト] ウィンドウのスクリーンショット。[クラス ライブラリ] アイコンが選択されています。

  4. ソリューション エクスプローラーのコンテキスト メニューの [削除] オプションを使用して、既定で追加されている Class1.cs ファイルを削除します (このファイルは使用しないため)。

  5. [プロジェクト] メニューの [参照の追加]... オプションを使用して、[参照] タブを使用して Microsoft.Web.Management.dll への参照を追加し、\\Windows\system32\inetsrv ディレクトリで検索します。 これは InetMgr のモジュールを作成するために必要なすべての拡張クラスを含む DLL です。

    WinForms に基づいて UI を作成するコードを使用するため、System.Windows.Forms.dll への参照を追加する必要があります。その場合は、[プロジェクト] メニューの [参照の追加...] オプションを使用し、.NET アセンブリの一覧で [System.Windows.Forms.dll] を選択します。

    InetMgr 内でライブラリを使用するための要件の 1 つは、GAC 内に登録する必要があるということです。 DLL に厳密な名前が付けられていることを確認します (署名済みとも呼ばれます)。 Visual Studio では、新しい名前を簡単に作成することができます。 [プロジェクト] メニューを使用して、[ExtensibilityDemo プロパティ] オプションを選択します。

  6. [署名] タブで、[アセンブリに署名する] をオンにします。

  7. コンボ ボックスで、<[新規...]> オプションを選択して新しいキーを作成します。 [厳密な名前キーの作成] ダイアログで、キーの名前として「DemoKey.snk」を入力し、[パスワードでキー ファイルを保護する] チェック ボックスをオフにします。 OK をクリックします。

    [厳密な名前キーの作成] ダイアログのスクリーンショット。

    [署名] タブは次のように表示されます。

    [署名] タブのスクリーンショット。

    アセンブリを GAC に含める必要があるため、コンパイルするたびにアセンブリが自動的に GAC に追加されるようにビルド後イベントをいくつか追加します。 これにより、デバッグが容易になり、新しい機能を追加する際の変更も容易になります。

  8. [ビルド イベント] タブを選択し、次の "ビルド後のイベント" コマンド ラインを追加します:

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

    [ビルド イベント] タブのスクリーンショット。

    (省略可能) Microsoft Visual Studio 2005 を使用している場合は、F5 キーを使用してコードを実行できるように、デバッグを正しく設定します。 プロジェクトのプロパティで、[デバッグ] タブを選択し、\windows\system32\inetsrv\inetmgr.exe を選択して外部プログラムを開始するように設定します

    [デバッグ] タブのスクリーンショット。

  9. プロジェクトのプロパティを閉じ、[ファイル] メニューの [すべて保存] オプションを選択し、場所を d:\Demos に設定します。 [保存] をクリックします。

    [プロジェクトの保存] ダイアログのスクリーンショット。

    次に、[ビルド] メニューの [ソリューションのビルド] を使用してプロジェクトをコンパイルします。 これにより、DLL が自動的にビルドされ、GAC に追加されます。

    Note

    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」と入力します。

    [新しい項目の追加] ウィンドウのスクリーンショット。[クラス] アイコンが強調表示されています。

  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 つのメイン メソッドがあります。 これは、すべてのアクションが発生するメソッドです。

  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\Assembly* フォルダーに移動します。

  2. アセンブリの一覧で ExtensibilityDemo を探し、右クリックしてプロパティを選択します。 ダイアログで、公開鍵トークンというフィールドが表示されます。InetMgr に登録するにはこの値が必要なので、クリップボードにコピーします。

    [機能拡張デモのプロパティ] ダイアログのスクリーンショット。

  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>
    

    Note

    これを moduleProviders の一覧のみに追加すると、このモジュールはサーバー接続の場合にのみ登録されます。 このモジュールをサイト接続とアプリケーション接続でも有効にする場合は、次の一覧に追加します。

    <location path=".">
      <module>
        <add name="ExtensibilityDemo" />
    </location>
    
  5. ファイルを保存して InetMgr を実行し、localhost に接続すると、次のメッセージが表示されます。

    メッセージの例ダイアログを示す I I S のスタート ページのスクリーンショット。

まとめ

この記事では、新しい IIS 管理ツールの拡張モジュールを開発するための Visual Studio プロジェクトを作成する方法について説明しました。 メッセージを表示するために、シンプルな ModuleProvider とメッセージを表示するモジュールを作成しました。

IIS 管理ツール モジュールの作成の基本を理解したら、拡張機能に使用できる、より興味深い機能について探索できます。