サービスプロジェクトの作成
Visual Studioで「Class Library (.NET Framework)」プロジェクトを新規作成し、SampleServiceという名前を付ける。
WCFサービスの追加
- 作成済みプロジェクトにWCFサービスを追加し、SampleServiceと命名。この際、System.ServiceModel参照が自動的に追加される。
- SampleServiceクラスのExecuteTaskメソッドを実装
namespace SampleProject
{
public class SampleService : ISampleService
{
public void ExecuteTask()
{
Console.WriteLine("サービス起動確認中");
}
}
}
ホストプロジェクトの構築
- 新しいコンソールアプリケーション(.NET Framework)を作成し、ServiceHostSampleと名付ける
- System.ServiceModelアセンブリをプロジェクトに追加
- 作成したSampleServiceを参照に追加
- App.Configに以下の設定を追加
<system.serviceModel>
<services>
<service name="SampleProject.SampleService" behaviorConfiguration="metadataBehavior">
<endpoint address="SampleEndpoint" binding="basicHttpBinding" contract="SampleProject.ISampleService" />
<endpoint address="SampleEndpoint" binding="netTcpBinding" contract="SampleProject.ISampleService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:9090/"/>
<add baseAddress="net.tcp://localhost:9091/"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
- メインメソッドに以下を追加
using (ServiceHost service = new ServiceHost(typeof(SampleProject.SampleService)))
{
service.Open();
Console.WriteLine("サービス起動日時: " + DateTime.Now.ToString());
Console.ReadLine();
}
管理者権限での実行が必要な場合、Visual Studioを管理者として起動するか、netshコマンドでURLアクセス権を設定する:
netsh http add urlacl url=http://+:9090/ user=ドメイン\ユーザー
クライアントの接続
- コンソールアプリケーションSampleClientを作成
- ServiceHostSampleを起動
- サービス参照でhttp://localhost:9090/を追加
- メインメソッドに以下を記述
SampleProject.SampleServiceClient client = new SampleProject.SampleServiceClient("BasicHttpBinding_ISampleService");
client.ExecuteTask();
- 実行すると、ホスト側のコンソールに「サービス起動確認中」と表示される