.net – WCF :: ServiceHost:奇怪……即使线程死了还活着?

.net – WCF :: ServiceHost:奇怪……即使线程死了还活着?,第1张

概述这里有新成员.很高兴看到这样一个整洁的社区. 经过一番研究,我决定在我的应用程序中使用WCF进行进程间通信,所以我使用的是NetNamedPipeBinding绑定. ServiceHost托管应用程序不是专用服务器,因此必须通过线程生成ServiceHost.到现在为止还挺好. 所以我有以下内容: Foo(){ Thread serverThread = new Thread(new 这里有新成员.很高兴看到这样一个整洁的社区.

经过一番研究,我决定在我的应用程序中使用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保持活动一段时间(真实){Thread.休眠状态(100);}?

谢谢.

解决方法 在ServiceHost上调用Open时,将创建一个额外的线程来侦听传入的服务请求.这样,您的线程可能已经完成运行,但是已经创建了另一个线程,并且将继续运行,直到您在ServiceHost上调用“关闭”.

在您的情况下可能没有必要自己生成一个线程.只需在应用程序的主线程中打开ServiceHost即可.然后,您可以在主线程中执行其他 *** 作,当您准备好终止主机时,只需调用serviceHost.Close().

这是我发现的非常好的描述:

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

总结

以上是内存溢出为你收集整理的.net – WCF :: ServiceHost:奇怪……即使线程死了还活着?全部内容,希望文章能够帮你解决.net – WCF :: ServiceHost:奇怪……即使线程死了还活着?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1195075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存