WCF 主机程序是不是为该服务打开了第二个线程?
Posted
技术标签:
【中文标题】WCF 主机程序是不是为该服务打开了第二个线程?【英文标题】:Are WCF host programs opening a second thread for the service?WCF 主机程序是否为该服务打开了第二个线程? 【发布时间】:2018-08-26 01:49:18 【问题描述】:我一直在尝试了解 WCF 服务和主机。我制作了一个简单的主机程序来托管我的简单服务。它工作正常,但我不明白宿主程序在打开服务后如何继续完成不相关的任务。服务是否在后台打开的单独线程上运行?或者当我的客户调用服务时,是否会暂停主机程序?我在任何地方都没有看到记录。
namespace MyHostProgram
class Program
static void Main(string[] args)
var host = new ServiceHost(typeof(MyServices.Service1));
host.Open();
while (true)
Console.Writeline("Doing other tasks in host program");
host.Close();
请注意,我不是在问添加另一个线程是否会加快速度,例如WCF Service and Threading,我问的是默认行为是什么。
【问题讨论】:
你测试的时候发生了什么? WCF Service and Threading的可能重复 @Amy 这个问题是问他是否可以通过添加一个额外的线程来改进他的程序。 这个问题从来没有问过这个问题。 @Amy 那么他问的是“我如何在 WCF 中使用多线程来加快速度?”仍然不确定这与我的问题是什么 【参考方案1】:当您调用 ServiceHost 类的 Open 函数时,它会在配置的端点上创建并打开服务的侦听器。它异步执行此操作,并将控制权交还给调用线程。
所以你的问题的答案是:
服务是否在后台打开的单独线程上运行?
是的
当我的客户调用服务时,会暂停主机程序吗?
没有
【讨论】:
【参考方案2】:这意味着 Open() 会产生一个新线程,其中包含传输接收循环或异步回调寄存器(取决于绑定)。
您可以考虑阅读多线程和异步编程以更好地掌握这一点。
希望这会有所帮助!
【讨论】:
以上是关于WCF 主机程序是不是为该服务打开了第二个线程?的主要内容,如果未能解决你的问题,请参考以下文章