HttpListener.Start()永不返回

时间:2018-08-04 05:42:39

标签: c# windows-services

我的HttpListener作为单独的线程托管在Windows服务中。我们使用的是.Net 4.6,客户端操作系统是Windows Server 2008 R2。在停止Windows服务之前,我已经停止并关闭了HttpListener。我一直等到从我正在使用的端口中删除所有tcp连接。

有时候,当我尝试启动监听器时,HttpListener.Start之后的行仍未执行。

    while (i < 10)
    {
        try
        {
            System.Diagnostics.EventLog.WriteEntry(cs, $"Starting port {this.CurrentPort}", System.Diagnostics.EventLogEntryType.Information);
            this.Listener.Start();
            System.Diagnostics.EventLog.WriteEntry(cs, $"Started port {this.CurrentPort}", System.Diagnostics.EventLogEntryType.Information);
            break;
        }
        catch (Exception ex)
        {
            System.Diagnostics.EventLog.WriteEntry(cs, ex.ToString(), System.Diagnostics.EventLogEntryType.Information);
            retMessage.SetError(ex.ToString());
            System.Threading.Thread.Sleep(5000);
        }
        i++;
    }

这是我获取端口状态的方法:

private Dictionary<int, TcpState> AllPorts
{
    get
    {
        var ports = new Dictionary<int, TcpState>();
        IPGlobalProperties globalProperties = IPGlobalProperties.GetIPGlobalProperties();
        var tcpNonListeningPorts = globalProperties.GetActiveTcpConnections();
        var tcpListeningPorts = globalProperties.GetActiveTcpListeners();

        foreach (var ipPort in tcpNonListeningPorts)
            ports[ipPort.LocalEndPoint.Port] = ipPort.State;

        foreach (var ipPort in tcpListeningPorts)
            ports[ipPort.Port] = TcpState.Listen;

        return ports;
    }
}

只要端口存在于列表中,我就不会停止Windows服务。

0 个答案:

没有答案