【问题标题】:Not to close the WCF service host from key stroke不要从按键中关闭 WCF 服务主机
【发布时间】:2020-12-08 09:29:42
【问题描述】:

我们创建了一个服务主机控制台应用,需要用户按键关闭,代码sn-p如下:

            ........
            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 服务主机,而不是人机交互。我们目前的解决方案基于以下几点:

How to: Host a WCF service in a managed app

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

以下是否可以解决我们面临的问题?

How to: Host a WCF Service in a Managed Windows Service

【问题讨论】:

  • 您好,问题解决了吗?如果您认为我的回复对您有帮助,您可以将其标记为答案。

标签: wcf


【解决方案1】:

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

更新:

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

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

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

【讨论】:

  • 如果您在代码中删除 host.Close() 以及用户交互部分,重新​​构建并在命令行中运行代码,主机将保持打开还是关闭?
  • 主机将保持打开状态,直到您关闭 exe。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多