WCF主机程序是否为该服务打开了第二个线程?

时间:2018-03-16 22:05:51

标签: c# multithreading wcf blocking

我一直在努力了解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,我问的是默认行为是什么。

2 个答案:

答案 0 :(得分:0)

当您调用ServiceHost类的Open函数时,它会在配置的端点上创建并打开服务的侦听器。它以异步方式执行此操作,并将控制权返回给调用线程。

所以问题的答案是:

  

服务是否在一个在幕后打开的单独线程上运行?

  

当我的客户端调用该服务时,是否会暂停主机程序?

没有

答案 1 :(得分:-1)

所有这些意味着Open()产生一个新线程,其中包含传输接收循环或异步回调寄存器(取决于绑定)。

您可以考虑阅读多线程和异步编程,以便更好地掌握这一点。

希望这有帮助!