错误1503服务没有及时响应启动或控制请求

问题描述 投票:0回答:1

我为我的项目安装了Windows服务,当我启动该服务时出现此错误。

错误1503服务没有及时响应启动或控制请求

但是,当我在 Visual Studio Code 中调试时,该项目工作正常,但当我使用 Visual Studio 2017 按照本 tutorial

创建并启动服务时

我尝试了很少的解决方案,但错误仍然相同。这是我尝试过的解决方案。

使用 CCCleaner 扫描并修复问题

将 ServicesPipeTimeout 修改为 180000

下面的Logservice可以将字符串写入文本文件,我在其中分析服务运行直到哪一部分失败。该服务只能运行到 LogService("3");然后它无法从端口接收字节。

这是代码:

 public Service1()
        {
            InitializeComponent();
            LogService("server");

        try
        {
            LogService("1");
            IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
            UdpClient udpListener = new UdpClient(514);
            byte[] bReceive; string sReceive; string sourceIP;
            Console.WriteLine("Waiting...");
            /* Main Loop */
            /* Listen for incoming data on udp port 514 (default for SysLog events) */
            while (true)
            {
                LogService("2");
                try
                {
                    LogService("3");
                    bReceive = udpListener.Receive(ref anyIP);
                    LogService("4");
                    /* Convert incoming data from bytes to ASCII */
                    sReceive = Encoding.ASCII.GetString(bReceive);
                    LogService(sReceive);
                    /* Get the IP of the device sending the syslog */
                    sourceIP = anyIP.Address.ToString();
                    LogService("5");
                    LogService(sourceIP);
                    new Thread(new logHandler(sourceIP, sReceive).handleLog).Start();
                    /* Start a new thread to handle received syslog event */

                    LogService(sReceive);
                }
                catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            throw ex;
        }
    }

不知道是代码原因还是其他原因导致错误

更新 参考这个post,我尝试关闭防火墙来接收所有连接,但错误仍然存在。

有一次我的项目在代码中添加

udpListener.Client.Bind(anyIP);
后成功监听了服务器的数据,但经过一些修改后它不再起作用。我不确定 Bind() 是否能让代码工作一次。

c# windows-services visual-studio-code visual-studio-2017
1个回答
0
投票

这是我解决错误的方法,请参阅此post。不管怎样,我并不完全理解这背后的过程,如果有人有一些很好的例子或链接来解释这个解决方案,请随时在下面发表评论。

protected override void OnStart(string[] args)
    {
        LogService("Service started");
        NewThread = new Thread(runSysLog);
        NewThread.Start();
    }

    protected override void OnStop()
    {
        LogService("Service stopped");
        StopRequest.Set();
        //NewThread.Join();
    }

public void runSysLog()
    {
        try
        {
            AutoResetEvent StopRequest = new AutoResetEvent(false);
            /* Main Loop */
            while (true)
            {
                if (StopRequest.WaitOne(5000)) return;
                try
                { 
                    //while (udpListener.Available > 0)
                    if (udpListener.Available > 0)
                    {
                        //Some code here  
                    }
                }
                catch (Exception ex)
                {
                    LogService("Whileloop exception: " +ex.ToString());
                    throw ex;
                }
            }
        }
        catch (Exception ex)
        {
            LogService("Run Sys Log Exception: " +ex.ToString());
            throw ex;
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.