Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误1054-服务未及时响应-C#应用程序_C#_Service_Saas - Fatal编程技术网

错误1054-服务未及时响应-C#应用程序

错误1054-服务未及时响应-C#应用程序,c#,service,saas,C#,Service,Saas,我在安装我的服务应用程序时遇到问题。当我运行我的调试模式时,一切都正常工作,所有的逻辑都正常工作。我以前写过服务应用程序,比较这两个应用程序,这一个和正常工作的应用程序几乎没有区别。提前感谢您对我的代码的任何帮助: class MainClass : ServiceBase { ABCSQLCon _SQLCon = new ABCSQLCon(); private int cycleTime = 0; private delegate void processErr

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

 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

问题在于,您在初始化服务本身时建立了数据库连接

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

    #if(!DEBUG)
        ServiceBase.Run(new MainClass());
    #else
        MainClass service = new MainClass();
        service.OnStart(new string[0]);
    #endif
我怀疑启动方法需要很长时间,因为这行代码:

    if (_SQLCon.testSQLConnection())

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

最好在另一个线程上调用方法,然后在服务线程上调用方法,以避免阻塞服务线程

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();
}

请澄清问题所在-您的问题中不清楚。testSQLConnection()可能需要太长时间才能完成。服务控制管理器只给您很短的时间来完成
OnStart
方法,然后就推断它已挂起。啊,我现在发现了问题,sql连接测试只是一个快速打开和关闭的工作,但我没有看到或意识到我在哪里初始化了_SQLCON对象。我已经将_SQLCON的初始化移到了我的方法中,现在可以正常工作了。快乐的日子,谢谢你的回答,因为它帮助我找到了我没有看到的地方。x