コンソールアプリケーションによってホストされているWCFサービスがあります。クライアントは、名前付きパイプを介してサービスに接続します。また、コンソールはクライアントが必要とする場合にのみ実行され、コンソールはクライアントの実行後に強制終了されます。
サービスを開始して呼び出すコードは次のとおりです。
Process hostProcess = Process.Start(info);
//make sure the service is up and running
//todo: find out a better way to check if the service is up and running.
Thread.Sleep(200);
EndpointAddress endpointAddress = new EndpointAddress("net.pipe://localhost/test");
NetNamedPipeBinding binding = new NetNamedPipeBinding();
IHostedService service=hannelFactory<IHostedService>.CreateChannel(binding, endpointAddress);
service.Run();
hostProcess.Kill();
私はThread.Sleepを使用してサービスが稼働していることを確認していますが、それは間違いなく正しいアプローチではありません。
では、コンソールアプリケーションでホストされているWCFサービスが稼働しているかどうかを確認するにはどうすればよいですか?
フォローアップの質問ですが、Thread.Sleepを使用せずにイベントが発生するのを待つにはどうすればよいですか?
private static EventWaitHandle GetEventWaitHandle()
{
try
{
EventWaitHandle eventWaitHandle = EventWaitHandle.OpenExisting(string.Format(serviceStartedEventName, taskIndex));
return eventWaitHandle;
}
catch (Exception)
{
//if we do not sleep here, it may cause a stack over flow exceptoin.
Thread.Sleep(10);
return GetEventWaitHandle();
}
}