use*_*335 6 .net wcf tcp process
我在.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在父进程被杀死时杀死子进程?
谢谢 !
显然 BCL 允许子进程继承所有句柄(本例中为端口)请参阅MSDN 论坛上的 Stephen Cleary 回复
我目前遇到类似的问题并使用临时解决方法。我已启用 Net.Tcp 端口共享服务并在您的 wcf 服务 app.config 中启用它。(更多信息在这里)
当我有时间时,将寻求实施斯蒂芬的建议作为更永久的解决方案:)
归档时间: |
|
查看次数: |
1160 次 |
最近记录: |