作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里有一个新成员。很高兴看到这样一个整洁的社区。
经过一番研究,我决定在我的应用程序中使用 WCF 进行进程间通信,因此我使用了 NetNamedPipeBinding 绑定(bind)。
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 上调用 Open 时,将创建一个额外的线程来监听传入的服务请求。这样,您的线程可能已经完成运行,但已创建另一个线程,并将继续运行,直到您在 ServiceHost 上调用“关闭”。
在您的情况下,您可能不需要自己生成线程。只需在应用程序的主线程中打开您的 ServiceHost。然后你可以在你的主线程中做其他事情,当你准备好杀死主机时,只需调用 serviceHost.Close()。
这是我发现的一个很好的描述:
http://www.code-magazine.com/article.aspx?quickid=0701041&page=1
关于.net - WCF::ServiceHost: Oddity...即使线程死了还活着吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932690/
我是一名优秀的程序员,十分优秀!