背景
我有一个.NET 4.0 WCF的应用程序,Net.Tcp端口667(Windows 7计算机)上侦听
在某些点上的应用程序退出非正常(用户杀死的过程中,例如)。
现在,一件奇怪的事情发生了: 该端口保持打开状态 。 当用户重新启动应用程序,它不能在该端口上侦听,因为它是已在使用。
奇怪的是,即使拥有的进程被杀死,操作系统不关闭端口,甚至没有几个小时后。
这里有一些意见:
- 上的TCPView过程是
<non-existent>
,该PID属于旧的(杀死的)处理,并且状态被LISTENING
。 本地地址是我的机器,那里不仅有IPV4
和IPV6
在该端口上监听。 - “关闭连接”和套装软件“结束进程”操作具有该端口上没有影响。
- 过程管理器不显示旧的(杀死的)过程。 我试图寻找手柄的PID或端口,但一无所获。
- 当运行
netstat -a -b -n -o
参与显示为可执行文件System
和本地地址为0.0.0.0
。 其他信息是一样的套装软件。
我发现,关闭该端口的唯一方法是在系统重新启动...
问题
- 有没有配置WCF的net.tcp服务主机监听器,以避免挥之不去的过程中存在非正常后一种方式?
- 有没有一种方法以编程方式关闭该端口? 如果有,我的应用程序可以先试着听它之前关闭该端口。
- 有没有一种实用工具,可以关闭这样的“守护”的端口? (因为套装软件不能做到这一点)
- 这是一个OS错误? 如果不是OS跟踪这样的“守护”的听众,一旦过程中存在关闭它们?