2016-07-28 1 views
0

J'ai créé un service Windows qui va ouvrir le port et enregistrer les données dans un fichier texte. Il s'agit d'une communication de données asynchrone permettant de connecter plusieurs clients. Mais mon problème est qu'il n'en crée pas fichier journal aussi bien il ne se connecte pas de données. Guidez-moi où je me trompe ??? voici mon code ...Service Tcp Windows ne créant aucun fichier journal

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.Linq; 
using System.Net; 
using System.Net.Sockets; 
using System.ServiceProcess; 
using System.Text; 
using System.Threading.Tasks; 
using System.Configuration; 
using System.IO; 

namespace TcpService 
{ 
    public partial class Service1 : ServiceBase 
    { 
     public Service1() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnStart(string[] args) 
     { 
      SetupServer(); 
     } 

     public void OnDebug() 
     { 
      OnStart(null); 
     } 

     protected override void OnStop() 
     { 
      Service1._serverSocket = null; 
     } 

     private static byte[] _buffer = new byte[1024]; 
     private static List<Socket> _ClientSockets = new List<Socket>(); 
     private static int port = 10000; 
     private static IPAddress iparr = IPAddress.Parse("192.168.1.12"); 
     private static Socket _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
     private static void SetupServer() 
     { 
      //Console.WriteLine("Setting Up server"); 
      _serverSocket.Bind(new IPEndPoint(iparr, port)); 
      _serverSocket.Listen(100); 
      _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null); 
     } 

     private static void AcceptCallback(IAsyncResult AR) 
     { 
      Socket socket = _serverSocket.EndAccept(AR); 
      _ClientSockets.Add(socket); 
      //Console.WriteLine("Client Connected"); 
      socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); 
      _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null); 
     } 

     private static void ReceiveCallback(IAsyncResult AR) 
     { 
      try 
      { 
       SocketError errorCode; 
       Socket socket = (Socket)AR.AsyncState; 
       int received = socket.EndReceive(AR, out errorCode); 
       if (errorCode != SocketError.Success) 
       { 
        received = 0; 
       } 

       byte[] databuf = new byte[received]; 
       Array.Copy(_buffer, databuf, received); 
       string text = BitConverter.ToString(databuf); 
       string time = DateTime.Now.TimeOfDay.ToString(); 
       string dataline = time + "____" + text; 
       AddtoLogFile(dataline); 
       socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); 
      } 
      catch (Exception ex) 
      { 
      } 
     } 

     private static void AddtoLogFile(string Message) 
     { 
      string LogPath = @"D:\\Logfile\\"; 
      string filename = "Log_" + DateTime.Now.ToString("dd-MM-yyyy") + ".txt"; 
      string filepath = LogPath + filename; 
      if (File.Exists(filepath)) 
      { 
       using (StreamWriter writer = new StreamWriter(filepath, true)) 
       { 
        writer.WriteLine(Message); 
       } 
      } 
      else 
      { 
       StreamWriter writer = File.CreateText(filepath); 
       writer.WriteLine(Message); 
       writer.Close(); 
      } 
     } 
    } 
} 
+0

Donc, quand vous déboguer ce code, ce qui se produit? Parce que je suppose que vous l'avez débogué pour savoir pourquoi il ne crée pas votre fichier journal. –

+0

Désolé, j'ai manqué cela ... Quand je débogue le code ci-dessus Il crée le fichier, mais pas la journalisation des données ... –

+0

Que diriez-vous de l'exception vide? "catch (Exception ex) {...}" est probablement quelque chose ici ... –

Répondre

0

Maintenant, avec le code ci-dessous Tout fonctionne bien

private static void AddtoLogFile(string Message) 
    { 
     string LogPath = @"D:\Logfile\"; 
     string filename = "Log_" + DateTime.Now.ToString("dd-MM-yyyy") + ".txt"; 
     string filepath = LogPath + filename; 
     if (File.Exists(filepath)) 
     { 
      using (StreamWriter writer = new StreamWriter(filepath, true)) 
      { 
       writer.WriteLine(Message); 
      } 
     } 
     else 
     { 
      using (StreamWriter writer = new StreamWriter(filepath, false)) 
      { 
       using(StreamWriter writer1 = File.CreateText(filepath)) 
       { 
        if(File.Exists(filepath)) 
        { 
         writer.WriteLine(Message); 
        } 
       } 
       //StreamWriter writer1 = File.CreateText(filepath); 
       //writer.WriteLine(Message); 
      } 

Merci les gars ....

+0

La branche else est assez confuse. Ça ne marche pas non plus. 'using (StreamWriter writer = new StreamWriter (filepath, true)) { writer.WriteLine (Message); } 'est tout ce dont vous avez besoin. Pas de "si" du tout. Ou, 'File.AppendText (...)'. – usr