TCP / IP-Listener-in-windows-Dienst

Ich versuche, einen windows-Dienst erstellen, muss im hintergrund laufen und eingehende Datenverkehr (eine normale und regelmäßige TCP-listener)

mein code ist:

private TcpListener server;

public void startServer()
    {
       //EventLog.WriteEntry(source, "connected on: " + ipAddress.ToString() + " port: " + Service1.Port.ToString());

        server = new TcpListener(IPAddress.Parse("127.0.0.1"), Service1.Port);

         server.Start();
        while (true)
        {
          var client = server.AcceptTcpClient();


            new Thread(work).Start(client);

        }

 public void work(object client)
    {
        string msg = null;
        var clientLocal = (TcpClient)client;


            using (NetworkStream ns = clientLocal.GetStream())
            using (StreamReader sr = new StreamReader(ns))
            {
            byte[] msgFullArray = new UTF8Encoding(true).GetBytes(msg);
            fs.Write(msgFullArray, 0, msg.Length);
            }

nun, wenn Sie schauen Sie nicht auf die Methode an alle, wie immer, wenn ich beginne meinen Dienst, es friert immer, wenn ich versuche, starten Sie es auf meine :

 var client = server.AcceptTcpClient();

Bedeutung mein Dienst wird nie auf den Thread oder meine Methoden zu Arbeiten..
ich kann sehen, aus früheren Anmeldung, es geht meiner while-Schleife und dann nur mal den service

Nicht klar ist, was Aufruf startServer. Wenn es direkt aufgerufen, durch Ihre OnStart Methode, das ist ein problem. Als Sie beobachtet habe, AcceptTcpClient blockiert, bis ein client wird angezeigt, aber der thread, der OnStart genannt wird, auf der gehört nicht zu Ihnen, und Sie sollten nicht es zu blockieren.
gut, Sie sind richtig, dass meine onstart-Methode ist der Aufruf "server.startServer();" aber ich bin mir nicht sicher, ob ich verstehe, wie es zu beheben dann?

InformationsquelleAutor Pilsneren | 2016-08-23

Schreibe einen Kommentar