новый член здесь. Приятно видеть такое аккуратное сообщество.
После небольшого исследования я решил использовать WCF в своем приложении для межпроцессного взаимодействия, поэтому я использую привязку NetNamedPipeBinding.
Хост-приложение ServiceHost не является выделенным сервером, поэтому оно должно порождать ServiceHost через поток. Пока все хорошо.
Итак, у меня есть что-то вроде следующего:
Foo()
{
Thread serverThread = new Thread(new ThreadStart(ServerThread));
serverThread.Start();
Console.WriteLine("Foo Exited");
}
ServerThread()
{
Uri baseAddress = new Uri("net.pipe://localhost/service");
ServiceHost serviceHost = new ServiceHost(typeof(MyService), baseAddress);
...
serviceHost.Open();
Console.WriteLine("Server Thread Exited");
}
Итак, как и ожидалось, я вижу:
-> Server Thread Exited
-> Foo Exited
Но, к моему удивлению, несмотря на то, что поток, на котором запущен сервер, возбужден, клиент все равно может подключиться к serviceHost, а хост службы обрабатывает запрос правильно!
Так почему же ServiceHost все еще обрабатывает и обрабатывает запросы, даже если его основной поток (тот, на котором он был создан) мертв?
Также есть лучший способ сохранить ServerThread живым, чем некоторое время (true) {Thread. Sleep (100);}
?
Спасибо.