IIS 7.0 の MWA と MWM の概要

作成者: Janani Ravi

要約

IIS 7.0 以降のサーバーで (分散構成ファイル内の) カスタム構成を管理するために IIS マネージャー ツールを拡張するには、Microsoft.Web.Administration.dll と Microsoft.Web.Management.dll の 2 つの異なるアセンブリの API を使用する必要があります。 これらの API は、大きく異なるアクションに使用するもので、根本的に異なる目的を持っています。 このドキュメントでは、これらの API が提供する機能とそれらの間の関係の概要を簡単に説明します。

はじめに

IIS マネージャー (InetMgr) に UI を追加してサーバー構成ファイルのカスタム設定を管理する予定の場合は、Microsoft.Web.Administration.dll と Microsoft.Web.Management.dll の各 API を使用します。 これらのアセンブリから API によって提供される機能は根本的に異なり、初めて使用する開発者は混同しがちなことがあります。 この記事では、これらの各アセンブリが提供する内容の簡単な概要について説明します。

Microsoft.Web.Administration と Microsoft.Web.Management とは

このセクションでは、これらのそれぞれについて簡単に説明します。

Microsoft.Web.Administration

Microsoft.Web.Administration (MWA) API は、ネイティブ コード インターフェイス ライブラリである Application Host Administration API (AHADMIN) のマネージド コード ラッパーとして構築されています。 Web サーバーの構成と管理情報にプログラムでアクセスして更新する方法を提供します。

Microsoft.Web.Administration.dll は、ユーザーがサーバーの設定を簡単に調整する方法です。 UI の拡張機能や機能の追加はサポートされていません。 実際、IIS マネージャーのいくつかの UI 機能では、この API を使用してバックエンドの構成設定を管理します。

MWA API は、開発者がマネージド コード (C#、VB など) でプログラムを記述し、特定の順序でサーバーを構成する場合に使用されます。 この API は、スタンドアロンのコンソール アプリケーションから、または IIS マネージャーの UI 機能内から使用されます。

これらの 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 が呼び出されると更新されます。

このアセンブリによって提供される厳密に型指定されたクラスの一部の概要を次に示します。

ServerManager クラスと他のクラス間の接続を示す図。

個々の構成ファイルへのアクセス

IIS が使用する分散構成ファイル モデルを使用すると、サイト、アプリケーション、仮想ディレクトリ、またはフォルダーにも、web.config ファイルにその構成を持たせられます。

特定のエンティティの設定を調整するために、個々の構成ファイルにアクセスできます。 ServerManager メソッド GetApplicationHostConfiguration は applicationHost.config にアクセスするために使用され、GetWebConfiguration メソッドは特定の構成ファイルを取得するためのパラメーターを受け入れます。

拡張性のための汎用基底クラス

IIS 構成システムを使用すると、アプリケーションに関連するプロパティを指定するセクションを作成できます。 MWA API を使用して、これらの設定を操作するために、マネージド コードで厳密に型指定されたクラスを作成します。 これを容易にする基底クラスの一部は次のとおりです。

  • Configuration: 1 つの構成ファイル (サイトとアプリケーションの applicationHost.config または web.config ファイル) を表します
  • ConfigurationElement: 構成ファイル内の要素を表すために使用される汎用エンティティ。 これは、構成セクション、コレクション エントリ、セクション内の入れ子になった要素などの基底クラスです。
  • ConfigurationAttribute: ConfigurationElement 内のプロパティを表します
  • ConfigurationSection: ConfigurationElement から派生し、IIS スキーマ ファイルで定義されているセクションを表します。 セクションのさまざまなプロパティにアクセスするために使用されます。
  • ConfigurationElementCollection: ConfigurationElements で構成されるコレクション クラス。 ConfigurationElement からも派生します。

汎用構成の拡張性の簡単な概要を次に示します。

汎用構成の接続を示す図。

構成へのランタイム アクセス

WebConfigurationManager は、サーバーの構成設定へのランタイム アクセスに使用されます。 IIS パイプラインに読み込まれたマネージド モジュールは、このクラスを参照することで、特定のコンテキスト (特定のサイトへの要求など) の構成設定にアクセスします。

Microsoft.Web.Management

Microsoft.Web.Management (MWM) API は、管理設定とクライアント側のユーザー インターフェイス機能を操作するためのサーバー側コードを開発するための構成要素です (この機能を使用すると、ユーザーはこれらの設定をわかりやすい方法で表示および操作できます)。

各名前空間の重要なクラスの一部の簡単な説明を以下に示します。 繰り返しますが、これは包括的なリストではなく、このアセンブリが提供する機能は、ここで説明する内容よりも格段に豊富です。

このアセンブリが提供する機能の概要を次に示します。

名前空間内のクラスの一覧を示すスクリーンショット。

Microsoft.Web.Management.Server

ModuleProvider 基底クラスから派生するクラスは、IIS マネージャーが UI モジュールを識別するためのエントリ ポイントを形成します。 これは、IIS マネージャーが機能セットの一部として表示するために administration.config に登録する必要があるクラスです。

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 ツールの認証機能のすべてのエントリのタスクがあります。

ここに示したのは、構成と UI を拡張して独自の機能を追加する開発者のために、Microsoft.Web.Administration API と Microsoft.Web.Management API が提供する機能を短くまとめた概要です。 構成の拡張性と UI の拡張性のしくみの詳細については、それらのトピックを扱う個々の記事を参照してください。