错误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
最好的做法是在不同的线程中调用方法,而不是在服务线程中调用,以避免阻塞服务线程
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方法及时返回,并且任何可能长时间运行的进程都在线程中完成。如果您将此测试移到一个线程中,那么您应该会发现它工作正常。