ホスティング サービス

アクティブにするには、サービスを作成してそのコンテキストと有効期間を制御するランタイム環境内で、サービスをホストする必要があります。 Windows Communication Foundation (WCF) サービスは、マネージド コードをサポートする任意の Windows プロセス内で実行されるように設計されています。

WCF により、サービス指向アプリケーションを構築するための統一されたプログラミング モデルが提供されます。 このプログラミング モデルには一貫性があり、サービスが展開されるランタイム環境に影響されません。 これは実際には、ホスト オプションにかかわらず、サービスのコードがほぼ同じになることを意味しています。

これらのホスト オプションの範囲は、コンソール アプリケーション内部での実行から、Windows サービスのようなサーバー環境、インターネット インフォメーション サービス (IIS) または Windows プロセス アクティブ化サービス (WAS) で管理されるワーカー プロセス内での実行までさまざまです。 開発者は、サービスの展開要件を満たすホスト環境を選択します。 このような要件は、アプリケーションを展開するプラットフォーム、メッセージの送受信を行うトランスポート、適切な可用性を保証するために必要なプロセスのリサイクルや管理、その他、管理上または信頼性上の要件から導き出されます。 ホスト オプションの情報とガイドラインについて、次のセクションで説明します。

ホスティング オプション

マネージド アプリケーションにおける自己ホスト

WCF サービスはすべてのマネージド アプリケーションでホストされます。 これは、展開に必要なインフラストラクチャが最小限になるため、最も柔軟なオプションです。 マネージド アプリケーション コード内にサービスのコードを埋め込み、続いて ServiceHost のインスタンスを作成して開き、サービスを有効にします。 詳細については、方法: マネージド アプリケーションでの WCF サービスのホストに関する記事を参照してください。

このオプションで可能になる一般的なシナリオには、コンソール アプリケーション内部で実行される WCF サービスと、Windows Presentation Foundation (WPF) または Windows フォーム (WinForms) に基づくもののようなリッチ クライアント アプリケーションの 2 つがあります。 コンソール アプリケーション内部の WCF サービスをホストすることは、一般的にアプリケーションの開発フェーズで有用です。 コンソール アプリケーションにより、アプリケーション内部で起こっている状況を見極めるための情報のデバッグやトレースが容易になり、新しい場所にアプリケーションをコピーして移動することも簡単に行うことができます。 このホスト オプションを使用すると、WPF や WinForms アプリケーションなどのリッチ クライアント アプリケーションが外部との通信を簡単に行えるようになります。 たとえば、ユーザー インターフェイスに WPF を使用しながら、他のクライアントからの接続を許容して情報を共有するために WCF サービスをホストするピアツーピア コラボレーションのクライアントなどです。

マネージド Windows サービス

このホスト オプションは、WCF サービスをマネージド Windows サービス (従来 NT サービスと呼ばれていたもの) としてホストするアプリケーション ドメイン (AppDomain) の登録から構成されているため、サービスのプロセス有効期間は Windows サービスのサービス コントロール マネージャー (SCM) によって制御されます。 自己ホスト オプションと同様、この種類のホスト環境では、ホスト コードをアプリケーションの一部として記述する必要があります。 サービスは、Windows サービスと WCF サービスの両方として実装します。そのためには、ServiceBase クラスと WCF サービス コントラクト インターフェイスから継承します。 次に ServiceHost を作成し、オーバーライドされた OnStart(String[]) メソッドで開き、オーバーライドされた OnStop() メソッドで閉じます。 また、 Installer から継承されるインストーラー クラスも実装し、プログラムが Installutil.exe ツールによって Windows サービスとしてインストールされるようにする必要があります。 詳細については、「方法: マネージド Windows サービスで WCF サービスをホストする」を参照してください。 マネージド Windows サービスのホスト オプションによって有効になるシナリオは、メッセージがアクティブ化されていない、セキュリティ保護された環境において、IIS の外部でホストされ、長時間実行される WCF サービスです。 サービスの有効期限は代わりにオペレーティング システムによって制御されます。 このホスト オプションは Windows のすべてのバージョンで使用できます。

インターネット インフォメーション サービス (IIS)

IIS ホスト オプションは ASP.NET と統合され、プロセスのリサイクル、アイドル シャットダウン、処理状況の監視、メッセージに基づくアクティベーションなど、これらのテクノロジによって提供される機能が使用されます。 Windows XP および Windows Server 2003 オペレーティング システムでは、高可用性と高スケーラビリティが求められる Web サービス アプリケーションのホストには、これが適切なソリューションとなります。 IIS では、顧客がエンタープライズ クラスのサーバー製品に求める統合された管理性も提供されます。 このホスト オプションでは、IIS が正しく構成されている必要がありますが、アプリケーションの一部としてホスト コードを書く必要はありません。 WCF サービス用に IIS ホストを構成する方法については、「方法: IIS で WCF サービスをホストする」を参照してください。

IIS でホストされるサービスで使用できるのは、HTTP トランスポートだけです。 IIS 5.1 の実装では、Windows XP にいくつかの制限がありました。 Windows XP 上で IIS 5.1 によって提供される、WCF サービス用のメッセージ ベースのアクティベーションによって、同じコンピューター上にあるそれ以外の自己ホスト型 WCF サービスによる、ポート 80 を使用した通信が妨げられます。 Windows Server 2003 上で IIS 6.0 によってホストした場合は、WCF サービスは他のアプリケーションと同じ AppDomain/アプリケーション プール/ワーカー プロセスで実行できます。 ただし、WCF と IIS 6.0 のどちらでもカーネル モードの HTTP スタック (HTTP.sys) が使用されるため、IIS 5.1 とは異なり、IIS 6.0 ではポート 80 を同じコンピューター上で実行される他の自己ホスト型 WCF サービスと共有できます。

Windows プロセス アクティブ化サービス (WAS)

Windows プロセス アクティブ化サービス (WAS) とは、Windows Vista でも使用できる Windows Server 2008 用の新しいプロセス アクティブ化機構です。 これにより、これまでの IIS 6.0 プロセス モデル (アプリケーション プールとメッセージベースのプロセス アクティブ化) やホスト機能 (迅速な障害保護、状態監視、リサイクルなど) が維持されていますが、アクティブ化アーキテクチャから HTTP へ依存する必要がなくなっています。 IIS 7.0 では、WAS を使用して HTTP を介したメッセージベースのアクティブ化を実現しています。 WCF によってサポートされる他のプロトコル (TCP、MSMQ、名前付きパイプなど) を介してメッセージ ベースのアクティベーションを実現するために、WAS には追加の WCF コンポーネントもプラグインされています。 これにより、IIS のプロセスのリサイクル、迅速な障害保護、一般的な構成システムなど、これまで HTTP ベースのアプリケーションのみで利用可能だった IIS 機能を、通信プロトコルを使用するアプリケーションでも使用できるようになりました。

このホスト オプションでは、WAS が正しく構成されている必要がありますが、アプリケーションの一部としてホスト コードを書く必要はありません。 WAS ホスティングの構成方法については、「方法: WAS で WCF サービスをホストする」を参照してください。

ホスト環境の選択

次の表に、各ホスト オプションに関連する主な利点とシナリオの要点をまとめます。

ホスト環境 一般的なシナリオ 主な利点と制限
マネージド アプリケーション ("自己ホスト") - 開発時に使用されるコンソール アプリケーション。
- サービスにアクセスするリッチな WinForm および WPF クライアント アプリケーション。
- 柔軟性。
- 展開の容易さ。
- サービスのエンタープライズ ソリューションではない。
Windows サービス (従来 NT サービスと呼ばれていたもの) - IIS の外部でホストされ、長時間実行される WCF サービス。 - サービス プロセスの有効期間は、メッセージによるアクティブ化ではなく、オペレーティング システムによって制御される。
- すべてのバージョンの Windows でサポートされる。
- セキュリティで保護された環境。
IIS 5.1、IIS 6.0 - HTTP プロトコルを使い、インターネット上で WCF サービスを ASP.NET コンテンツと共に同時に実行する。 - プロセスのリサイクル。
- アイドル シャットダウン。
- プロセスの稼働状況の監視。
- メッセージベースのアクティブ化。
- HTTP のみ。
Windows プロセス アクティブ化サービス (WAS) - インターネット上で IIS をインストールせずに、さまざまなトランスポート プロトコルを使用して WCF サービスを実行する。 - IIS は不要。
- プロセスのリサイクル。
- アイドル シャットダウン。
- プロセスの稼働状況の監視。
- メッセージベースのアクティブ化。
- HTTP、TCP、名前付きパイプ、および MSMQ で動作する。
IIS 7.0 - ASP.NET コンテンツと共に WCF サービスを実行する。
- インターネット上で、さまざまなトランスポート プロトコルを使用して WCF サービスを実行する。
- WAS の利点。
- ASP.NET および IIS コンテンツと統合される。

ホスト環境の選択は、その展開先の Windows のバージョン、メッセージの送信に必要なトランスポート、および必要となるプロセスとアプリケーション ドメインのリサイクルの種類に依存します。 次の表に、これらの要件に関連するデータをまとめます。

ホスト環境 プラットフォームの可用性 サポートされるトランスポート プロセスと AppDomain のリサイクル
マネージド アプリケーション ("自己ホスト") Windows XP、Windows Server 2003、Windows Vista、

Windows Server 2008
HTTP、

net.tcp、

net.pipe、

net.msmq
いいえ
Windows サービス (従来 NT サービスと呼ばれていたもの) Windows XP、Windows Server 2003、Windows Vista、

Windows Server 2008
HTTP、

net.tcp、

net.pipe、

net.msmq
いいえ
IIS 5.1 Windows XP HTTP はい
IIS 6.0 Windows Server 2003 HTTP はい
Windows プロセス アクティブ化サービス (WAS) Windows Vista、Windows Server 2008 HTTP、

net.tcp、

net.pipe、

net.msmq
はい

信頼されていないホストからサービスや拡張機能を実行すると、セキュリティが損なわれるので注意してください。 また、偽装して ServiceHost を開いた場合、ユーザーの WindowsIdentity をキャッシュするなどして、ユーザーがログオフしていないことを、アプリケーションによって確認する必要があります。

関連項目