【发布时间】:2011-08-14 16:38:05
【问题描述】:
我在 .net 3.5 中实现了一个小 WCF 服务,客户端通过 TCP 在端口 4321 上连接。该服务可以产生其他进程(通过 System.Diagnostics.Process)。当然,当服务被终止或崩溃或其他情况时,生成的进程仍然存在。我遇到的问题是,如果我在这些进程仍在运行时尝试重新启动服务,则会出现以下异常:
CommunicationException:有 已经是 IP 端点上的侦听器 0.0.0.0:4321。确保您没有尝试使用此端点 在您的应用程序中多次 没有其他应用程序 在这个端点上监听。
确实,当我运行 netstat 时,我可以看到有一个进程正在侦听 TCP 4321 端口:
TCP 0.0.0.0:4321 MTL-WKS-AG196:0 监听 97308
您在此处看到的进程 ID (97308) 是我第一次启动的服务之一(它应该不再存在,因为它已被杀死)。 释放端口的唯一方法是杀死在服务生命周期内产生的所有进程。
我对端口和进程了解不多,但我的理解是子进程“继承”了父进程监听的端口。或多或少会发生什么?
有没有办法取消这种行为?无法访问衍生进程的代码?
另外,我真的不认为这是可能的,但是有没有办法告诉 Windows 在其父进程被杀死时杀死子进程?
谢谢!
【问题讨论】: