c# - 为什么这个服务是 "not responding to the start or control request in a timely fashion"?

标签 c# windows-services

背景: 客户给了我一个第三方开发的 Windows 服务,他们希望我为他们运行该服务。但是,当我启动服务时,它超时并收到 1053“服务未响应...及时时尚”错误。

我已经反射(reflect)了程序集以获取它在其 start 方法中执行的代码,但粗略地看了一下,它看起来应该返回。

实际问题:有人可以解释为什么此服务会导致 1053 错误吗?

(检查日志文件已确认计时器已初始化并在服务终止之前多次触发。)

private void InitTimers()
{
    if (this._config.RunMode == RunModes.Continuous)
    {
        this.srvcTimer.Interval = Math.Max(this._config.Interval.TotalSeconds, 1.0) * 1000.0;
    }
    else
    {
        this.srvcTimer.Interval = 60000.0;
    }
    this.srvcTimer.AutoReset = true;
    this.srvcTimer.Enabled = true;
}

最佳答案

服务构造函数必须以“及时”的方式返回,服务才能成功启动。这意味着您无法在构造函数中启动可能昂贵的操作,而必须将其委托(delegate)给另一个线程。

通常,您可能会发现在开发服务时连接到本地数据库没问题,但一旦部署它并必须通过互联网连接,您就会发现它失败了。

如果没有看到构造函数中的确切代码,我不能肯定地说,但如果您将其移动到线程中,服务应该会成功启动。显然,这意味着您需要有某种方法来检查服务是否确实正确启动,并将错误从线程报告给主程序。

关于c# - 为什么这个服务是 "not responding to the start or control request in a timely fashion"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16403313/

相关文章:

c# - 交换单元格数据会违反唯一约束,尽管整体更改是有效的

c# - Crystal 报表没有出现在 asp.net 上

c# - Windows 服务总是 "Starting"

c# - 窗口服务和 C# 设计模式问题

windows-services - SC.exe config <servicename> obj = LocalSystem正在给出错误

c# - 我收到错误无法读取流的末尾为什么?

c# - 报表查看器可以从表单传递图像吗?

c# - 在 WinForms.NET 中渲染随机生成的迷宫

C# Windows 服务 - 多个计时器

c# - Windows 服务与 Windows 窗体在同一进程中