ВКФ::Хост службы:Странность… Все еще жив, даже если нить мертва?

StackOverflow https://stackoverflow.com/questions/932690

Вопрос

здесь новый участник.Приятно видеть такое дружное сообщество.

После небольшого исследования я решил использовать 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 все еще обрабатывает и обрабатывает запросы, хотя его основной поток (тот, в котором он был создан) мертв?

Также есть ли лучший способ сохранить работоспособность ServerThread, чем while(true){Thread.Сон(100);}?

Спасибо.

Это было полезно?

Решение

Когда вы вызываете Open на ServiceHost, будет создан дополнительный поток для прослушивания входящих запросов на обслуживание.Таким образом, ваш поток может завершить работу, но будет создан другой поток, который будет продолжать работать до тех пор, пока вы не вызовете команду «Закрыть» на ServiceHost.

В вашем случае, возможно, нет необходимости создавать поток самостоятельно.Просто откройте свой ServiceHost в основном потоке приложения.Затем вы можете делать другие вещи в своем основном потоке, и когда вы будете готовы уничтожить хост, просто вызовите serviceHost.Close().

Вот хорошее описание, которое я нашел:

http://www.code-magazine.com/article.aspx?quickid=0701041&page=1

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top