我有一个.net 4.0 WCF应用程序,它在net.tcp端口667上进行侦听.(Windows 7机器)
某些时候,应用程序会以非正常方式退出(例如,用户会终止该进程).
现在发生一件奇怪的事情:港口仍然开放.当用户重新启动应用程序时,它无法侦听该端口,因为它已在使用中.
奇怪的是,即使拥有进程被杀死,操作系统也不会关闭端口,即使在几个小时后也没有.
以下是一些观察结果:
<non-existent>,PID属于旧的(被杀死的)进程,状态是LISTENING.本地地址是我的机器,该端口上有两个IPV4和IPV6监听器.netstat -a -b -n -o所涉及的可执行文件时显示为System 和本地地址0.0.0.0.其他信息与TcpView相同.我发现关闭该端口的唯一方法是系统重启...
我在这里看到过类似的问题,但找不到答案.我有一个使用WCF打开到远程地址的连接的应用程序,有时当我从任务管理器中杀死应用程序或应用程序非正常地关闭连接保持打开然后当我重新启动我的应用程序时我得到一个异常告诉我已经有这个端口上的监听器.
几个问题:
serer方:
var url = Config.GetRemoteServerUrl();
var binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;
binding.ReliableSession.Enabled = Config.RelaiableSession;
binding.ReliableSession.InactivityTimeout = TimeSpan.MaxValue;
binding.MaxConnections = Config.MaxConcurrentSessions;
binding.ReaderQuotas.MaxArrayLength = Config.ReaderQuotasMaxArrayLength;
binding.MaxReceivedMessageSize = Config.MaxReceivedMessageSize;
binding.SendTimeout = new TimeSpan(0,0, 0, 0,Config.SendTimeout);
binding.OpenTimeout = new TimeSpan(0,0, 0, 0,Config.OpenTimeout);
host = new ServiceHost(ServerFacade.Instance, new Uri[] { new Uri(url) });
host.AddServiceEndpoint(typeof(ITSOServiceContract), binding, url);
host.Open();
serverFacade = host.SingletonInstance as IServerFacade;
Run Code Online (Sandbox Code Playgroud)