保持C#Windows服务正在运行

时间:2017-05-25 13:13:22

标签: c# windows-services

我知道这个主题有很多主题,但这是我的第一个Windows服务。

我的应用程序所做的是听取浏览器客户端的连接。

第一种方法是启动一个线程来处理监听连接,这使我的服务在一段时间后关闭。

    protected override void OnStart(string[] args)
    {
        _Server = new ImageStreamingServer();
        _Server.Start(8080);
    }
   public void Start(int port)
    {
        lock (this)
        {
            _Thread = new System.Threading.Thread(new 
            System.Threading.ParameterizedThreadStart(ServerThread));//server thread
            _Thread.IsBackground = true;
            _Thread.Start(port);
        }
    }
    private void ServerThread(object state)
    {
        try
        {
            System.Net.Sockets.Socket Server = new System.Net.Sockets.Socket(
                System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);

            Server.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Any, (int)state));
            Server.Listen(10);

            System.Diagnostics.Debug.WriteLine(string.Format("Server started on port {0}.", state));

            foreach (System.Net.Sockets.Socket client in Server.IncommingConnectoins())
            {
                System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ClientThread), client);
            } // Next client 

        }
        catch (Exception ex)
        { }

        this.Stop();
    }

以上代码在Windows窗体应用中运行,但服务会在一段时间后自动关闭。

我尝试在同一个线程上运行该类,但该服务甚至无法启动。 (有以下变化)

            //_Thread = new System.Threading.Thread(new 
            //System.Threading.ParameterizedThreadStart(ServerThread));
            //_Thread.IsBackground = true;
            //_Thread.Start(port);
            this.ServerThread(port);

0 个答案:

没有答案