10

Windows 服务中方法调用的顺序是什么?我们遇到了时间问题,我认为这是由于构造函数完成处理所需的时间太长。

这是一个类似的问题,我认为我们遇到 错误 1053 服务没有响应启动或控制请求

但是,我们想知道调用 Main、OnStart、InitializeComponent 等方法的顺序和时间和/或何时调用它们。

同样, OnStart 方法是否是放置所有处理的最佳位置?

**解决方案

花了一些时间做一个测试服务并测试了下面的响应,发现超时来自 Main 方法处理以及 Main 方法中调用的构造函数导致它超时。将所有内容移至 OnStart 以及仅关闭一个线程似乎可行。详情在这里。http://www.adamthings.com/post/2012/06/28/error-1053-the-service-did-not-respond-to-the-start-or-control-request-in-a-timely-时尚/

4

2 回答 2

6

不要阻塞在OnStart()方法中。听起来你正在这样做。

在方法中创建一个单独的线程OnStart()并离开那里。

我没有对此进行测试,但类似于:

protected override void OnStart(string[] args)
{
    var worker = new Thread(DoWork);
    worker.IsBackground = false;
    worker.Start();

    base.OnStart(args);
}

private void DoWork()
{
    while (!_stopRequested)  // (set this flag in the OnStop() method)
    {
        // processing goes here
    }
}

要回答有关事件顺序的问题,只需在每个方法中设置 Trace 语句。我不确定这会有多大帮助。您收到的消息(服务未响应启动请求......)表明在一个应该相对快速执行的方法中阻塞(或花费太长时间)。

于 2012-06-28T17:55:04.163 回答
6

我相信订单是

至于将代码放在哪里,我建议将任何可以缓存的Main代码放在OnStart. 但是,您不应该在 中进行任何实际处理OnStart,而只是初始化。使用单独的线程来完成大部分逻辑。

此外,MSDN 对此很有帮助

于 2012-06-28T17:50:28.100 回答