0

我在 vb.net 中为我的项目创建了一个 Windows 服务安装文件,但是在安装 Windows 服务后,当我尝试启动该 Windows 服务时,它会抛出以下错误:

The service did not respond to the start or control request in a timely fashion. 
Timeout (30000 milliseconds) waiting for the Test service to connect.

我能做些什么?

4

2 回答 2

4

Windows 服务的启动时间限制为 30 秒。如果服务在 30 秒后未开始响应 ServiceControlManager 调用,则会终止。

这通常是因为您在 OnStart() 方法中放置了一些长时间运行的代码,而这些代码没有及时完成。

尽量在 Service Constructor 和 OnStart 方法中保留最少的代码,然后如果需要做其他任何事情,例如调用数据库、加载数据、IO、调用外部服务等,都应该在主应用程序中完成。

于 2013-09-26T14:41:57.203 回答
2

看看你们的服务OnStart()方式?你在那里做重物吗?如果某些事情花费的时间比预期的要长,那么不会抛出异常?

看起来好像你试图做这样的事情

class MyService
{
    public void OnStart()
    {
        //blocks here
        Thread.Sleep(TimeSpan.FromSeconds(31));     
    }
}

相反,你应该做类似的事情

class MyService
{
    private Thread workerThread;

    public void OnStart()
    {
        workerThread = new Thread(()=>
        {
            Thread.Sleep(TimeSpan.FromSeconds(31));     
        })

        // doesn't block here
        workerThread.Start();
    }
}
于 2013-09-26T14:42:11.530 回答