一个新的成员在这里。很高兴看到这样一个整洁的社区。

后一点研究,我决定使用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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top