У меня есть служба 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();
}
}