2016-11-25 4 views
0

現在、WindowsサービスでTCPリスナーがホストされています。ランダムな間隔でリッスンを停止するように見えますが、クライアントが後でリクエストを行うと、リクエストが拒否されることは明らかです。私はすべてのタスクを取り戻そうとしましたが、問題は依然として続きます。例外はスローされず、したがってイベントログには何も書き込まれません。TCPリスナーがリッスンを停止します

public void Run() 
{ 
    var tcpDetail = Task.Run(() => _settingsHelper.GetTcpDetail()); 

    if (tcpDetail != null) 
    { 
     var listener = new TcpListener(tcpDetail.Result.ListeningAddress, tcpDetail.Result.ListeningPort); 

     listener.Start(); 

     while (true) 
     { 
      var tcpClient = listener.AcceptTcpClient(); 

      try 
      { 
       Task.Run(() => ProcessClient(tcpClient)); 

      } 
      catch (Exception ex) 
      { 
       EventLog.WriteEntry(AppDomain.CurrentDomain.FriendlyName, ex.Message); 
       if (tcpClient.Client != null && tcpClient.Connected) 
       { 
        tcpClient.Close(); 
       }       
      } 
     } 
    } 
} 


private void ProcessClient(TcpClient client) 
{ 
    try 
    { 
     var networkStream = client.GetStream(); 
     var reader = new StreamReader(networkStream); 


     var networkStream = client.GetStream(); 
     var reader = new StreamReader(networkStream); 

     var request = reader.ReadToEnd(); 

     if (!string.IsNullOrEmpty(request)) 
     { 
      var xmlDocument = new XmlDocument(); 
      xmlDocument.LoadXml(request); 
      _someService.Execute(xmlDocument); 
     } 

    } 
    catch (Exception ex) 
    { 
     EventLog.WriteEntry(AppDomain.CurrentDomain.FriendlyName, ex.Message); 
     if (client.Client != null && client.Connected) 
     { 
      client.Close(); 
     } 
    } 
    finally 
    { 
     if (client.Client != null && client.Connected) 
     { 
      client.Close(); 
     } 
    } 
} 

答えて

0

サービスが再開されたためにこの動作が発生していたことがわかりました。 OnStop関数でリスナーを停止するように呼び出すと、問題が解決しました。

関連する問題