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