サービスの実装

公開日: 2007 年 12 月 2 日 (作業者: walterov (英語))

更新日: 2008 年 3 月 13 日 (作業者: walterov (英語))

概要

ソリューションの実装は、Windows Communication Foundation (WCF) を使用した Web サービス構築の推奨されるパターンや実践法に従います。これについては、Web Service Software Factory ガイドで解説しています。

詳細な情報については、以下のサイトで入手可能です。

以下のセクションでは、各サブシステムの実装について詳細に説明します。

  • サブシステム
  • Web サブシステム
  • FTP サブシステム
  • コンテンツ ストレージ サブシステム
  • ユーザー アカウント サブシステム
  • SQL サブシステム
  • サンプル サービスのホスティング
  • セキュリティ ロール プロバイダー

サブシステム 

Web、FTP、SQL などの各サブシステムの実装は、3 つのプロジェクトに分割されます。

  • DataContract
  • ServiceContract
  • 以下の図にあるような ServiceContract の実装

Ff454012.Solution(ja-jp,TechNet.10).jpg

例外管理のように、すべてのサブシステム間で通常共有される特定の機能があるため、それらすべてのコンポーネントは Microsoft.Hosting.Management という別のプロジェクトに分けられます。さらに、上の設計図に示されているように、すべてのサブシステムは一貫した例外処理のために、WCF サービス全体にわたって同じ FaultContract を共有します。

Web サブシステム

IIS 7 は、管理関連の新機能すべての中核となる新しい構成システムを導入しています。この構成システムは、クリア テキストの分散 XML ファイルに基づいています。この分散 XML ファイルには、(IIS や ASP.NET、そして FTP など他のコンポーネントを含む) Web サーバー プラットフォーム全体の構成設定が保存されています。また、この構成システムは、コンテンツ ディレクトリ内の Web コンテンツと同様、任意に設定できます。

構成階層の各レベルは、コンピューターの管理者によって、サイトの管理者やアプリケーション開発者など他のユーザーに委任されることがあります。

セキュリティで保護された既定値や出荷時の設定でのロックダウンは、構成設定への書き込みアクセスをコンピューターの管理者のみに制限します。ただし、各々の Web 名前空間の範囲においては、高度かつ詳細なロック機能により、安全にロックが解除でき、より多くのユーザーに対し特定の構成設定の管理を委任することができます。

システムは 2 つのレベルで下位互換性があります。以前のバージョンの IIS では API レベル、そして以前のバージョンの .NET Framework では XML レベルです。

スキーマ

コア部分での構成システムは、宣言的なスキーマからは分離されています。構成のスキーマは、お馴染みの windows\system32\inetsrv\config\schema\ という場所に、複数のファイルに分かれて格納されます。

それらのスキーマ ファイルは、Web サーバーの動作、サイト、アプリケーション、その他のエンティティを制御するさまざまな構成および設定を定義します。

Web サブシステムにおいて定義されるデータ コントラクトは、それらのスキーマ ファイルから派生しています。以下の IIS_schema.xml の断片は、ProcessModel の定義を示しています。

Ff454012.iisschema(ja-jp,TechNet.10).jpg

以下のコード ス二ペットは、ProcessModel に対応する DataContract を示しています。

Ff454012.procmodel(ja-jp,TechNet.10).jpg 

完全なソース コードについては、実際のコードを参照してください。

前の記事で説明されたとおり、すべてのサービス操作は 3 つのカテゴリに分類されます。

  • プロビジョニング
  • 管理
  • クエリ

このパターンに従って、Web サブシステム関連のすべてのサービス操作は、以下の 3 つのサービス コントラクトにより定義されます。

  • IProvisioningService
  • IManagementService
  • IQueryService

以下のコード スニペットは、これら 3 つのサービス コントラクトの実際の定義を示しています。

 Ff454012.provisioning(ja-jp,TechNet.10).jpg

 Ff454012.management(ja-jp,TechNet.10).jpg

 Ff454012.query(ja-jp,TechNet.10).jpg

サービスの実装はすべて、以下の Visual Studio のスクリーン ショットに示されているように、サービス実装プロジェクトに含まれています。

Ff454012.servimpproject(ja-jp,TechNet.10).jpg

これら 3 つのサービス間で特定の操作が重なるため、実際の実装はすべて WebManager クラスによって、IIS の管理 API を活用する静的メソッドとして処理されます。

Web 関連の操作に加えて、すべての証明書関連の操作について CertificateManager クラスの処理があります。Windows Server® 2008 は、証明書管理のための新しい API を導入しました。それらのプラットフォーム API は、マネージ コードとしては公開されていません。CertificateManager は、それらの API を管理 API としてラップするために、プラットフォーム呼び出しを使用します。

サービス実装プロジェクトには、構成 (web.config や app.config など) で定義された設定をサービスが使用できるようにするために、構成関連のクラスも含まれています。

IIS 7 には非常に多くの設定があり、この時点ですべてのサービス操作が実装されたわけではありません。時間が許すなら、さらに操作を加え続けます。しかし、既存の実装に従うことにより、他のユーザーがさらに多くの機能を必要とする場合でも、かなり簡単に拡張が行えます。

FTP サブシステム

マイクロソフトでは、Windows Server® 2008 用に完全に書き直した新しい FTP サービスを作成しました。この新しい FTP サービスでは多くの新機能が追加され、Web サイト作成者はより効果的にコンテンツを発行でき、Web 管理者にはより多くのセキュリティ オプションと展開オプションが提供されます。新しく導入された FTP サービスの詳細については、関連するドキュメントを参照してください。

スキーマと図

Windows Server 2008 における FTP サービスのバックエンドの構成システムは、IIS サービスのシステム設計に基づいています。すべての FTP 関連の設定は、windows\system32\inetsrv\config\ 内の FTP_Schema.xml ファイルの中で定義されます。以下の図は、スキーマ ファイルの一部を示しています。

Ff454012.ftpschema(ja-jp,TechNet.10).jpg

FTP サブシステムの実装は、上記の Web サブシステムと同じ設計パターンに従います。その点は、以下のスクリーン ショットに示されています。

 Ff454012.ftpproj(ja-jp,TechNet.10).jpg

FTP サービスは、構成の観点から見れば IIS サービスの拡張であるため、Microsoft.Web.Administration という同じ管理 API が実装全体を通して使用されます。FTPManager クラスは、実際のサービス操作の実装をすべて含みます。そして、それは一部の機能の再利用において、上述の WebManager クラスに依存しています。

コンテンツ ストレージ サブシステム

コンテンツ ストレージ サブシステムは、Windows のファイル システム上でコンテンツを管理するための一連のサービスを提供します。それらのサービスには、ディレクトリの作成、ディレクトリあるいはファイルのアクセス許可の設定、ディスク クォータの管理などがあります。

以下の各図は、コンテンツ ストレージのサービスを実装するために用いられるのと同じ設計パターンを示しています。もちろん、異なるファイル システムでも、同じ設計パターンに従って実装することは可能です。

実際のコンテンツ ストレージ サービスの実装は、Microsoft.Hosting.Management コンポーネントの ContentStorageManager クラスで行われます。なぜなら、それらの機能は他のサービスと共有可能であるためです。

Ff454012.contstg1(ja-jp,TechNet.10).jpg

Ff454012.contstg2(ja-jp,TechNet.10).jpg 

ユーザー アカウント サブシステム

ユーザー アカウント サブシステムは、ローカルの Windows ユーザー アカウント、Active Directory ユーザー、OU とグループを作成するための共通機能を実装します。

図のパターン

このサブシステムは、他のサブシステムと同様の設計パターンに従います。それは、DataContract、ServiceContract、そして ServiceImplementation で構成されています。すべてのサービス操作の実装は、Microsoft.Hosting.Component プロジェクト内の UserAccountManager クラスに含まれています。

Ff454012.useracct(ja-jp,TechNet.10).jpg

SQL サブシステム

SQL サブシステムは、データベースの作成やデータベースのバックアップ/復元など、Microsoft SQL Server® 2005 に関連したサービスを管理するための一連の操作を実装します。すべての機能を提供するために、Microsoft SQL Server SMO (SQL 管理オブジェクト) が利用されます。サービスのコンパイルと実行を有効にするためには、Microsoft SQL Server のクライアント コンポーネントが必要です。Oracle や MySQL など他のデータベース製品に対しても、同様のサービス操作を実装することができます。

実装図

実装は、同じ設計パターンに従います。これには、以下に示すように DataContract、ServiceContract、そして ServiceImplementation が含まれています。

Ff454012.sql(ja-jp,TechNet.10).jpg

サンプル サービスのホスティング

2 つの別個のホスティング ソリューションが実装されました。IIS に基づくホスティングと、Windows サービスに基づくホスティングです。

オプション

WCF ホスティングの実装方法については、WCF ドキュメントに従って必要なホスティング オプションを実装してください。

または

その他のオプションは、「ホスト」で入手可能です。

以下の図は、Visual Studio 内の 2 つのホスティング ソリューションを示しています。

Ff454012.hostingMSH(ja-jp,TechNet.10).jpg

セキュリティ ロール プロバイダー

サンプル コードは、Windows ロール プロバイダーを使用して、すべての着信について WCF で役割チェックを行ない、発信者が WindowsBuiltInRole.Administrator グループのメンバーであるか照合します。これは、下の図にあるように、Microsoft.Hosting.Management プロジェクト内の WindowsAuthorizationManager.cs ファイルに実装されています。

Ff454012.WinAuthMgr(ja-jp,TechNet.10).jpg

役割の変更

この役割を変更する必要がある場合、変更方法は以下の図に示されている CheckAccessCore を参照してください。

Ff454012.CheckAccessCore(ja-jp,TechNet.10).jpg