WCF::ServiceHost:怪异...还活着,即使螺纹是死了吗?
-
06-09-2019 - |
题
一个新的成员在这里。很高兴看到这样一个整洁的社区。
后一点研究,我决定使用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活着然后while(true){线。睡眠(100);}?
谢谢。
解决方案
当你打电话打开ServiceHost,一个额外的线将创建的监听来的服务的请求。这样一来,你的线可能已经完成了运行,但是另外一个线程已经建立,并将继续运行直到你叫"接近"于ServiceHost.
它可能没有必要在你的案例产生关螺纹自己。只要打开你的ServiceHost在应用程序的主线。然后你可以做其他事情在你的主线程,以及当你准备好要杀死的东道,只是叫serviceHost.Close().
这里有一个很好说明我发现:
http://www.code-magazine.com/article.aspx?quickid=0701041&page=1
不隶属于 StackOverflow