ホスティング サービス

サービスをアクティブにするには、サービスを作成してそのコンテキストと有効期間を制御するランタイム環境内で、サービスをホストする必要があります。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 メソッドで開き、オーバーライドされた 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 をキャッシュするなどして、ユーザーがログオフしていないことを確認する必要があります。

参照

処理手順

方法 : IIS で WCF サービスをホストする
方法 : WAS で WCF サービスをホストする
方法 : マネージ Windows サービスで WCF サービスをホストする
方法 : マネージ アプリケーションで WCF サービスをホストする

概念

WCF システム要件
基本的なプログラミング ライフサイクル
サービス コントラクトの実装