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 Process Activation Service (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 が対応しているトランスポート層プロトコルはどれでも使用できます。

Windows サービス アプリケーションの内部で WCF をホストするには

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

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

    • OnStart をオーバーライドして、ServiceHost のインスタンスを必要な個数開くようにします。単一の Windows サービス アプリケーションで、一体となって開始および終了する複数の WCF サービスをホストできます。
    • OnStop をオーバーライドして、OnStart 時に起動された WCF サービスが稼働する ServiceHost の、Closed を呼び出します。
    • ServiceHostFaulted イベントをサブスクライブし、エラー時には、ServiceController クラスを使用して Windows サービス アプリケーションをシャットダウンします。

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

関連項目

タスク

方法 : マネージ Windows サービスで WCF サービスをホストする

リファレンス

System.ServiceProcess

その他の技術情報

Windows Service Host
チュートリアル : コンポーネント デザイナによる Windows サービス アプリケーションの作成
サービス アプリケーションのプログラミング アーキテクチャ