当Windows服务已停止时,WCF服务仍然可调用

本文关键字:服务 WCF 调用 Windows | 更新日期: 2023-09-27 17:58:10

我用C#编写了一个windows服务。NET。此windows服务包含WCF服务。然后,我在windows服务的OnStart中使用一个新的ServiceHost来侦听WCF服务的消息。并在OnStop中关闭此ServiceHost。

当服务运行时,我可以很好地调用WCF服务。但是,我随后停止了该服务,但仍然可以调用WCF服务。我没想到会发生这种事。发生了什么事?

OnStart和OnStop代码低于

    protected override void OnStart(string[] args)
    {
        if (serviceHost != null)
        {
            serviceHost.Close();
        }
        serviceHost = new ServiceHost(typeof(MyService));
        // Open the ServiceHostBase to create listeners and start 
        // listening for messages.
        serviceHost.Open();
    }
    protected override void OnStop()
    {
        if (serviceHost != null)
        {
            serviceHost.Close();
            serviceHost = null;
        }
    }

当Windows服务已停止时,WCF服务仍然可调用

您的OnStop方法看起来像这样吗:

protected override void OnStop()
{
  if (serviceHost != null)
  {
      try {
          serviceHost.Close();
      }catch{
          //could throw an exception if it is in a bad state
      }finally{
          serviceHost = null;
      }
  }
}

第二件需要检查的事情是您的OnStop是否被调用,如果CanStop标志为false,它将不会调用stop。

我现在已经解决了这个问题,并认为我会更新答案。尽管我怀疑其他人会这么愚蠢;)

我通过右键单击项目并选择"添加引用"而不是"添加服务引用",将引用添加到了我的客户端应用程序中。我仍然不确定为什么这允许在服务不运行时调用它,但现在我已经将它添加为服务引用,一切都如预期一样工作。

感谢大家的投入。