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