首页 > 解决方案 > 不要从按键中关闭 WCF 服务主机

问题描述

我们创建了一个服务主机控制台应用程序,该应用程序需要用户击键来关闭它,代码片段如下:

            ........
            host.Open();                

            Console.WriteLine($"The service is ready {host.Description.Endpoints?.FirstOrDefault()?.Address.Uri.ToString()}");
            
            Console.WriteLine("Press <ENTER> to terminate service.");
            Console.WriteLine();
            Console.ReadLine();
            Console.WriteLine("<ENTER> pressed, about to Shutdown Service Host ...");
            host.Close();
            Console.WriteLine("Service Host is closed");
            .......

我想删除用户干预以关闭主机并保持打开状态。评论 host.Close() 行会确认它仍然打开吗?

- - - - - - - - - - - - - - - -更新 - - - - - - - - - --------------------

我之前的帖子可能不够清楚。我期待机器对机器的交互来启动和停止 WCF 服务主机,而不是人机交互。我们目前的解决方案基于以下几点:

如何:在托管应用中托管 WCF 服务

我们面临的问题是基于上述解决方案的.exe在启动某个端点地址的通道后立即关闭。很明显 ENTER 以某种方式被按下

以下是我们所面临的可能的解决方案吗?

如何:在托管 Windows 服务中托管 WCF 服务

标签: wcf

解决方案


您只需要删除 host.Close()。host.Close() 方法将使通信对象从其当前状态转换为关闭状态。有关 ServiceHost 类的更多信息,您可以参考此链接

更新:

只要不运行 host.Close(),WCF 服务在正常情况下将保持打开状态。如果 WCF 服务托管在 Windows 服务中,我们可以通过运行 Windows 服务或停止 Windows 服务来启动和关闭 WCF 服务。

WCF 也可以托管在 IIS 中。IIS 中托管的 WCF 服务就像一个 Web 应用程序。只要站点处于启动状态,WCF 服务就会一直运行。

有关“在 IIS 中托管 WCF 服务”的更多信息,您可以参考此链接


推荐阅读