错误1054 -服务没有及时响应- c#应用程序

本文关键字:响应 应用程序 1054 服务 错误 | 更新日期: 2023-09-27 18:11:53

我在安装服务应用程序时遇到问题。当我运行我的调试模式,它都工作正确,所有的逻辑的东西工作。我以前写过服务应用程序,比较两者,这一个和一个工作的没有什么区别。提前感谢您对我的代码的任何帮助:

 class MainClass : ServiceBase
{
    ABCSQLCon _SQLCon = new ABCSQLCon();
    private int cycleTime = 0;
    private delegate void processError(String errorMessage);
    static void Main(string[] args)
    {
        #if(!DEBUG)
            ServiceBase.Run(new MainClass());
        #else
            MainClass service = new MainClass();
            service.OnStart(new string[0]);
        #endif
    }
    protected override void OnStart(string[] args)
    {
        addToLog("Testing SQL Connection...", "Log");
        cycleTime = _SQLCon.sleepTime;
        addToLog("Sleep Time has been set...", "Log");
        if (_SQLCon.testSQLConnection())
        {
            addToLog("Connection to SQL Database succeeded", "Log");
           // queryThread();
            //not neccessary to make applicated multithreaded yet.
            addToLog("Starting Query Thread...", "Log");
            ThreadStart queryCycle = new ThreadStart(queryThread);
            Thread qThread = new Thread(queryCycle);
            qThread.Start();
        }
    }
    private void startProgram()
    {
    }
    protected override void OnStop()
    {
        base.OnStop();
    }
    public MainClass()
    {
        this.ServiceName = "ABCSQL Engine";
    }

啊,我现在发现了问题,sql连接测试只是一个快速打开和关闭的工作,但我没有看到或意识到的是我在哪里初始化_SQLCON对象。我已经把它移到了我的方法中,现在工作得很好。快乐的日子,谢谢你的答案,因为它帮助我找到了我没有找到的地方。x

错误1054 -服务没有及时响应- c#应用程序

最好的做法是在不同的线程中调用方法,而不是在服务线程中调用,以避免阻塞服务线程

public void MyMethod()
{
        addToLog("Testing SQL Connection...", "Log");
        cycleTime = _SQLCon.sleepTime;
        addToLog("Sleep Time has been set...", "Log");
        if (_SQLCon.testSQLConnection())
        {
            addToLog("Connection to SQL Database succeeded", "Log");
           // queryThread();
            //not neccessary to make applicated multithreaded yet.
            addToLog("Starting Query Thread...", "Log");
            ThreadStart queryCycle = new ThreadStart(queryThread);
            Thread qThread = new Thread(queryCycle);
            qThread.Start();
        }
}
 private Thread _myThread;
 protected override void OnStart(string[] args)
{
        ThreadStart threadStart = MyMethod;
         _myThread = new Thread(threadStart);
         _myThread.Start();
}

问题是,您是在初始化服务本身时进行数据库连接的。

它可以在调试中工作,因为您实际上没有将其作为服务启动:

    #if(!DEBUG)
        ServiceBase.Run(new MainClass());
    #else
        MainClass service = new MainClass();
        service.OnStart(new string[0]);
    #endif

我怀疑start方法花了很长时间,因为这一行:

    if (_SQLCon.testSQLConnection())

您需要确保服务的start方法及时返回,并且任何可能长时间运行的进程都在线程中完成。如果您将此测试移到一个线程中,那么您应该会发现它工作正常。