C# 如何等待WCF释放端口?
我有一个windows服务,它使用WCF与gui通信。不幸的是,当我想从gui重新启动服务(以重新加载配置)时,我收到以下消息: IP端点0.0.0.0:1111上已存在侦听器 我正在使用暂停代码重新启动服务:C# 如何等待WCF释放端口?,c#,wcf,C#,Wcf,我有一个windows服务,它使用WCF与gui通信。不幸的是,当我想从gui重新启动服务(以重新加载配置)时,我收到以下消息: IP端点0.0.0.0:1111上已存在侦听器 我正在使用暂停代码重新启动服务: if (sc.Status == ServiceControllerStatus.Running) { sc.Stop(); sc.WaitForStatus(ServiceControllerStatus.
if (sc.Status == ServiceControllerStatus.Running)
{
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped);
sc.Start();
}
问题是服务控制器的状态已为“已停止”,WCF仍然没有释放端口。我怎么能等到这一切发生呢?我一直在为同样的问题苦苦挣扎。在OnStop方法中,我调用ServiceHost的Close()方法,然后将服务主机本身设置为null
到目前为止,仅仅这样做就解决了这个问题。。。到目前为止。端口是否及时保留?这是一个tcp连接,因此答案可能是肯定的。端口没有被阻塞很长时间-只需几秒钟,我就可以再次运行该服务)。您在OnStop方法中做了什么?请显示代码。没什么-只是写入事件日志。整个WCF宿主部件被放置在另一个类中,并实现了IDisposable。我一直默默地希望ServiceHost将由垃圾收集器收集(在GC中执行close()方法之后)。显式运行Dispose()没有任何区别。您可能刚刚回答了您的问题。无论在OnStart中执行什么操作,都需要在OnStop中撤消。