Windows サービス アプリケーションのホスト

Windows サービス (従来 Windows NT サービスと呼ばれていたもの) が提供するプロセス モデルが特に適しているのは、長い期間にわたって動作し続ける必要があり、どのような形式でもユーザー インターフェイスを表示することのないアプリケーションです。 Windows サービス アプリケーションのプロセスの有効期間を管理するのは、サービス コントロール マネージャー (SCM) です。SCM を使用して、Windows サービス アプリケーションを起動、停止、および一時停止できます。 Windows サービスのプロセスは、コンピューターの起動時に自動的に開始されるように構成できるので、"常時稼働" するアプリケーションのホスティング環境として適しています。 Windows サービス アプリケーションの詳細については、Windows サービス アプリケーションに関するページを参照してください。

長時間実行される Windows Communication Foundation (WCF) サービスをホストするアプリケーションでは、Windows サービスと多くの特性が共有されます。 特に、WCF サービスは長期間動作し続けるサーバー側実行可能ファイルであり、ユーザーと直接対話することがないので、ユーザー インターフェイスは実装されません。 したがって、WCF サービスを Windows サービス アプリケーション内でホストするやり方も、頑健で長期間動作し続ける WCF アプリケーションの構築方法として選択肢となります。

WCF の開発者は、多くの場合、WCF アプリケーションを Windows サービス アプリケーション内と、Internet Information Services (IIS) や Windows プロセス アクティブ化サービス (WAS) のホスティング環境内のどちらでホストするかを決定しなければなりません。 次のような場合、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 が対応しているトランスポートをどれでも使用できます。

操作方法

  1. Windows サービス アプリケーションを作成します。 Windows サービス アプリケーションは、System.ServiceProcess 名前空間のクラスを使用して、マネージド コードとして記述することができます。 このアプリケーションには、ServiceBase から派生したクラスを 1 つ含める必要があります。

  2. WCF サービスの有効期間を、Windows サービス アプリケーションの有効期間とリンクさせます。 通常、Windows サービス アプリケーションでホストされる WCF サービスは、ホストする側のサービスの起動時にアクティブになり、停止時にメッセージの監視をやめ、WCF サービスにエラーが生じた場合はホストする側のプロセスをシャットダウンするようにします。 これは次のようにして実装します。

    • OnStart(String[]) をオーバーライドして、ServiceHost のインスタンスを必要な個数開くようにします。 単一の Windows サービス アプリケーションで、一体となって開始および終了する複数の WCF サービスをホストできます。

    • OnStop をオーバーライドして、OnStart(String[]) 時に起動された WCF サービスが稼働する ServiceHostClosed を呼び出します。

    • FaultedServiceHost イベントを定期受信し、エラー時には、ServiceController クラスを使用して Windows サービス アプリケーションをシャットダウンします。

    WCF サービスをホストする Windows サービス アプリケーションも、WCF を使わない Windows サービス アプリケーションと同様に展開および管理されます。

関連項目