Windows サービス アプリケーションのホストHosting in a Windows Service Application

Windows サービス (従来 Windows NT サービスと呼ばれていたもの) が提供するプロセス モデルが特に適しているのは、長い期間にわたって動作し続ける必要があり、どのような形式でもユーザー インターフェイスを表示することのないアプリケーションです。Windows services (formerly known as Windows NT services) provide a process model particularly suited to applications that must live in a long-running executable and do not display any form of user interface. Windows サービス アプリケーションのプロセスの有効期間を管理するのは、サービス コントロール マネージャー (SCM) です。SCM を使用して、Windows サービス アプリケーションを起動、停止、および一時停止できます。The process lifetime of a Windows service application is managed by the service control manager (SCM), which allows you to start, stop, and pause Windows service applications. 「常時オン」のアプリケーションの適切なホスティング環境のため、コンピューターの起動時に自動的に開始する、Windows サービスのプロセスを構成することができます。You can configure a Windows service process to start automatically when the computer starts, making it a suitable hosting environment for "always on" applications. Windows サービス アプリケーションの詳細については、次を参照してください。 Windows サービス アプリケーションします。For more information about Windows service applications, see Windows Service Applications.

実行時間の長い Windows Communication Foundation (WCF) サービスをホストしているアプリケーションは、Windows サービスとの特性の多くを共有します。Applications that host long-running Windows Communication Foundation (WCF) services share many characteristics with Windows services. 具体的には、WCF サービスは、実行時間の長いサーバー実行可能ファイルは、ユーザーと直接対話しないのすべてのユーザー インターフェイスを実装しないでください。In particular, WCF services are long-running server executables that do not interact directly with the user and therefore do not implement any form of user interface. そのため、Windows サービス アプリケーションの内部で WCF サービスをホストしているは、実行時間の長い、堅牢な WCF アプリケーションを構築するための 1 つのオプションです。As such, hosting WCF services inside of a Windows service application is one option for building robust, long-running, WCF applications.

多くの場合、WCF の開発者では Windows サービス アプリケーションの内部で、またはインターネット インフォメーション サービス (IIS) または Windows プロセス アクティブ化サービス (WAS) のホスティング環境の内部では、WCF アプリケーションをホストするかどうかを決める必要があります。Often, WCF developers must decide whether to host their WCF application inside of a Windows service application or inside of the Internet Information Services (IIS) or Windows Process Activation Service (WAS) hosting environment. 次のような場合、Windows サービス上でホストする方法を使用できないか検討してください。You should consider using Windows service applications under the following conditions:

  • アプリケーションを明示的にアクティブ化する必要がある場合。Your application requires explicit activation. たとえば、サーバー起動時に自動的にアプリケーションも起動しなければならず、最初に届いたメッセージに応答して動的に起動するのでは困るような場合です。For example, you should use Windows services when your application must start automatically when the server starts instead of being dynamically started in response to the first incoming message.

  • アプリケーションをホストするプロセスが、起動されたらそのまま動作し続けなければならない場合。The process that hosts your application must remain running once started. 一度起動した Windows サービスのプロセスは、サーバー管理者がサービス コントロール マネージャーで明示的にシャットダウンしない限り、そのまま動作し続けます。Once started, a Windows service process remains running unless explicitly shut down by a server administrator using the service control manager. IIS や WAS 上でホストするアプリケーションは、動的に起動および停止して、システム リソースを効率よく使うことができます。Applications hosted in IIS or WAS may be started and stopped dynamically to make optimal use of system resources. しかし、ホストするプロセスの有効期間にわたって明示的に制御しなければならない場合、IIS や WAS ではなく Windows サービスを使う必要があります。Applications that require explicit control over the lifetime of their hosting process should use Windows services instead of IIS or WAS.

  • WCF サービスは、Windows Server 2003 で実行され、HTTP 以外のトランスポートを使用する必要があります。Your WCF service must run on Windows Server 2003 and use transports other than HTTP. Windows Server 2003 で IIS 6.0 のホスティング環境では、HTTP 通信のみに制限されています。On Windows Server 2003, the IIS 6.0 hosting environment is restricted to HTTP communication only. Windows サービス アプリケーションは、この制限が適用されないし、net.tcp、net.pipe、net.msmq など、トランスポート WCF のサポートを使用できます。Windows service applications are not subject to this restriction and can use any transport WCF supports, including net.tcp, net.pipe, and net.msmq.

Windows サービス アプリケーションの内部で WCF をホストするにはTo host WCF inside of a Windows service application

  1. Windows サービス アプリケーションを作成します。Create a Windows service application. Windows サービス アプリケーションは、System.ServiceProcess 名前空間のクラスを使用して、マネージ コードとして記述することができます。You can write Windows service applications in managed code using the classes in the System.ServiceProcess namespace. このアプリケーションには、ServiceBase から派生したクラスを 1 つ含める必要があります。This application must include one class that inherits from ServiceBase.

  2. WCF サービスの有効期間を Windows サービス アプリケーションの有効期間にリンクします。Link the lifetime of the WCF services to the lifetime of the Windows service application. 通常、ホスティング サービス開始時にアクティブになる、ホスティング、サービスが停止すると、WCF サービスには、エラーが発生したときに、ホスト プロセスをシャット ダウン場合に、メッセージのリッスンを停止する Windows サービス アプリケーションでホストされる WCF サービスをします。Typically, you want WCF services hosted in a Windows service application to become active when the hosting service starts, stop listening for messages when the hosting service is stopped, and shut down the hosting process when the WCF service encounters an error. これは次のようにして実装します。This can be accomplished as follows:

    • OnStart(String[]) をオーバーライドして、ServiceHost のインスタンスを必要な個数開くようにします。Override OnStart(String[]) to open one or more instances of ServiceHost. 1 つの Windows サービス アプリケーションは、開始時刻と停止をグループとして複数の WCF サービスをホストできます。A single Windows service application can host multiple WCF services that start and stop as a group.

    • オーバーライドOnStopを呼び出すClosed上、ServiceHost中に開始された実行中の WCF サービスOnStart(String[])します。Override OnStop to call Closed on the ServiceHost any running WCF services that were started during OnStart(String[]).

    • FaultedServiceHost イベントを定期受信し、エラー時には、ServiceController クラスを使用して Windows サービス アプリケーションをシャットダウンします。Subscribe to the Faulted event of ServiceHost and use the ServiceController class to shut down the Windows service application in case of error.

    WCF サービスをホストする Windows サービス アプリケーションが展開され、WCF のない Windows サービス アプリケーションを使用して、としては、同じ方法で管理されています。Windows service applications that host WCF services are deployed and managed in the same way as Windows service applications that do not make use of WCF.

関連項目See also