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

时间:2011-06-02 12:07:05

标签: c# .net wcf service

我在C#.NET中编写了一个Windows服务。此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;
        }
    }

2 个答案:

答案 0 :(得分:0)

您的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 flag为假,则不会调用停止。

答案 1 :(得分:0)

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

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

感谢大家的投入。