当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;
}
}
您的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。
我现在已经解决了这个问题,并认为我会更新答案。尽管我怀疑其他人会这么愚蠢;)
我通过右键单击项目并选择"添加引用"而不是"添加服务引用",将引用添加到了我的客户端应用程序中。我仍然不确定为什么这允许在服务不运行时调用它,但现在我已经将它添加为服务引用,一切都如预期一样工作。
感谢大家的投入。