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 主机程序是不是为该服务打开了第二个线程?的主要内容,如果未能解决你的问题,请参考以下文章

WCF学习——构建第二个WCF应用程序

无法将第二个参数传递给带有两个参数的 WCF 服务

C#如何强制等待连接到 WCF 服务

一个 WCF 服务中的多个合同_但调用第二个合同时出错

在此上下文中启动了第二个操作

如何从现有的 WSDL 和 XSD 文件生成 WCF 服务主机