gpt4 book ai didi

.net - WCF::ServiceHost: Oddity...即使线程死了还活着吗?

转载 作者:行者123 更新时间:2023-12-01 07:22:59 29 4
gpt4 key购买 nike

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

经过一番研究,我决定在我的应用程序中使用 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 仍然在处理和处理请求,即使它的主线程(它创建的那个)已经死了?

还有一种更好的方法可以让 ServerThread 保持事件状态一段时间(true){Thread. sleep (100);}?

谢谢。

最佳答案

当您在 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com