次の方法で共有


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

ここでは、Windows サービスでホストされる Windows Communication Foundation (WCF) サービスを作成するために必要な基本手順について説明します。このシナリオは、マネージ Windows サービスのホスト オプションによって有効になります。このサービスは、メッセージがアクティブ化されていない、セキュリティ保護された環境において、インターネット インフォメーション サービス (IIS) の外部でホストされ、長時間実行される WCF サービスです。サービスの有効期限は代わりにオペレーティング システムによって制御されます。このホスト オプションは Windows のすべてのバージョンで使用できます。

Windows サービスは、Microsoft 管理コンソール (MMC) の Microsoft.ManagementConsole.SnapIn を使用して管理し、システムのブート時に自動的に起動するように構成できます。このホスト オプションは、WCF サービスをマネージ Windows サービスとしてホストするアプリケーション ドメイン (AppDomain) の登録から構成されているため、サービスのプロセス有効期間は Windows サービスのサービス コントロール マネージャ (SCM) によって制御されます。

サービス コードには、サービス コントラクトのサービス実装、Windows サービス クラス、およびインストーラ クラスが含まれています。サービス実装クラスである CalculatorService は WCF サービスです。一方、CalculatorWindowsService は Windows サービスです。Windows サービスとして限定するため、このクラスは ServiceBase を継承し、OnStart メソッドと OnStop メソッドを実装しています。OnStart では、CalculatorService 型の ServiceHost が作成され、開かれます。OnStop では、このサービスが停止され、破棄されます。ホストはベース アドレスをサービス ホストに提供する必要もあります。サービス ホストは、アプリケーション設定で構成されます。インストーラ クラスは Installer を継承します。このクラスを使用すると、Installutil.exe ツールにより、プログラムを Windows サービスとしてインストールできます。

サービスを構築してホスティング コードを提供する

  1. Service.cs ファイルで、電卓サービスのインターフェイスを使用して ICalculator サービス コントラクトを定義します。

  2. WCF ICalculator インターフェイスから継承することにより、Service.cs ファイルの CalculatorService クラスに、サービス コントラクトを WCF サービスとして実装します。

  3. ServiceBase クラスから継承することにより、Windows サービスを実装します。ServiceHost のインスタンスを作成して開くには、OnStart メソッドをオーバーライドします。ServiceHost のインスタンスを閉じるには、OnStop メソッドをオーバーライドします。CalculatorService のインスタンスを作成し、"WCFWindowsServiceSample" という名前を付けます。アプリケーションのエントリ ポイントを指定します。

  4. Installer を継承し、RunInstallerAttributetrue に設定した ProjectInstaller クラスを作成します。これにより、アセンブリのインストール時に、Visual Studio の Custom Action Installer または InstallUtil.exe が起動されます。

  5. 構成でサービスのベース アドレスを指定します。

サービスをインストールして実行する

  1. サービスをコンパイルして、実行可能ファイル Service.exe をビルドします。

  2. コマンド プロンプトで「installutil bin\service.exe」と入力して、Windows サービスをインストールします (パスがまだ設定されていない場合、このツールは Microsoft.NET Framework インストール ディレクトリにあります)。コマンド プロンプトで「services.msc」と入力してサービス コントロール マネージャ (SCM) にアクセスします。Windows サービスは、[Services] に "WCFWindowsServiceSample" として表示されます。Windows サービスが実行されている場合、クライアントに応答できるサービスは WCF サービスのみです。サービスを開始するには、SCM でそのサービスを右クリックして [Start] をクリックするか、コマンド プロンプトで「net start WCFWindowsServiceSample」と入力します。

  3. サービスを変更する場合は、まずそのサービスを停止してからアンインストールする必要があります。サービスを停止するには、SCM でそのサービスを右クリックして [Stop] をクリックするか、コマンド プロンプトで「net stop WCFWindowsServiceSample」と入力します。Windows サービスを停止してクライアントを実行すると、クライアントがこのサービスにアクセスしようとしたときに EndpointNotFoundException 例外が発生することに注意してください。Windows サービスをアンインストールするには、コマンド プロンプトで「installutil /u bin\service.exe」と入力します。

コントラクト、実装、および Windows サービスのインストール コードおよびホスト コードと共に Service.cs ファイルの内容を次のコードに示します。

"自己ホスト" オプションと同様、Windows サービス ホスト環境では、ホスト コードをアプリケーションの一部として記述する必要があります。サービスが .exe プログラムとして実装され、独自のホスティング コードが指定されます。インターネット インフォメーション サービス (IIS) でホストされる Windows プロセス アクティブ化サービス (WAS) など、他のホスト環境ではホスティング コードを記述する必要はありません。

関連項目

概念

マネージ アプリケーションのホスト
ホスティング サービス