错误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