Windows サービス (旧称 Windows NT サービス) は、実行時間の長い実行可能ファイルに存在する必要があり、ユーザー インターフェイスの形式を表示しないアプリケーションに特に適したプロセス モデルを提供します。 Windows サービス アプリケーションのプロセスの有効期間は、サービス コントロール マネージャー (SCM) によって管理されます。これにより、Windows サービス アプリケーションを開始、停止、一時停止できます。 コンピューターの起動時に自動的に起動するように Windows サービス プロセスを構成し、"常時オン" アプリケーションに適したホスティング環境にすることができます。 Windows サービス アプリケーションの詳細については、「 Windows サービス アプリケーション」を参照してください。
実行時間の長い Windows Communication Foundation (WCF) サービスをホストするアプリケーションは、Windows サービスと多くの特性を共有します。 特に、WCF サービスは実行時間の長いサーバー実行可能ファイルであり、ユーザーと直接やり取りしないため、どのような形式のユーザー インターフェイスも実装しません。 そのため、Windows サービス アプリケーション内で WCF サービスをホストすることは、堅牢で実行時間の長い WCF アプリケーションを構築するための 1 つのオプションです。
多くの場合、WCF 開発者は、WCF アプリケーションを Windows サービス アプリケーション内でホストするか、インターネット インフォメーション サービス (IIS) または Windows プロセス アクティブ化サービス (WAS) ホスティング環境の内部でホストするかを決定する必要があります。 Windows サービス アプリケーションの使用は、次の条件で検討する必要があります。
アプリケーションで明示的なアクティブ化が必要です。 たとえば、最初の受信メッセージに応答して動的に起動するのではなく、サーバーの起動時にアプリケーションを自動的に起動する必要がある場合は、Windows サービスを使用する必要があります。
アプリケーションをホストするプロセスは、開始後も引き続き実行されている必要があります。 開始すると、サービス コントロール マネージャーを使用してサーバー管理者によって明示的にシャットダウンされない限り、Windows サービス プロセスは実行されたままです。 IIS または WAS でホストされているアプリケーションは、システム リソースを最適に使用するために、動的に開始および停止できます。 ホスト プロセスの有効期間を明示的に制御する必要があるアプリケーションでは、IIS または WAS の代わりに Windows サービスを使用する必要があります。
WCF サービスは Windows Server 2003 で実行し、HTTP 以外のトランスポートを使用する必要があります。 Windows Server 2003 では、IIS 6.0 ホスティング環境は HTTP 通信のみに制限されます。 Windows サービス アプリケーションはこの制限の対象ではなく、net.tcp、net.pipe、net.msmq など、任意のトランスポート WCF サポートを使用できます。
使い方
Windows サービス アプリケーションを作成します。 System.ServiceProcess名前空間のクラスを使用して、マネージド コードで Windows サービス アプリケーションを記述できます。 このアプリケーションには、 ServiceBaseから継承する 1 つのクラスが含まれている必要があります。
WCF サービスの有効期間を Windows サービス アプリケーションの有効期間にリンクします。 通常、Windows サービス アプリケーションでホストされている WCF サービスは、ホスティング サービスの開始時にアクティブになり、ホスティング サービスが停止されたときにメッセージのリッスンを停止し、WCF サービスでエラーが発生したときにホスティング プロセスをシャットダウンします。 これは、次のように実行できます。
OnStart(String[])をオーバーライドして、ServiceHostの 1 つ以上のインスタンスを開きます。 1 つの Windows サービス アプリケーションで、グループとして開始および停止する複数の WCF サービスをホストできます。
OnStopをオーバーライドして、Closed中に開始されたすべての実行中の WCF サービスについてServiceHostをOnStart(String[])で呼び出します。
FaultedのServiceHost イベントをサブスクライブし、ServiceController クラスを使用して、エラーが発生した場合に Windows サービス アプリケーションをシャットダウンします。
WCF サービスをホストする Windows サービス アプリケーションは、WCF を利用しない Windows サービス アプリケーションと同じ方法で展開および管理されます。