在Windows服务中调用方法的顺序是什么?我们遇到了计时问题,我认为这是由于构造函数花了太长时间才完成处理。
我认为这是一个类似的问题 Error 1053 the service did not respond to the start or control request
但是,我们很想知道调用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-fashion/
答案 0 :(得分:6)
我相信订单是
Main
(Main
is the entrypoint to just about every app in windows, services not excluded)Main
应致电)InitializeComponent
OnStart
(这实际上是按需调用的...基本上是在调用Start时...因此事先Main
和InitializeComponent
发生的原因)至于放置代码的位置,我建议将任何可以缓存的代码放在Main
中,并在OnStart
内的每个启动中循环使用任何代码。但是,您不应该在OnStart
中进行任何实际处理,只需初始化即可。使用单独的线程来完成大部分逻辑。
答案 1 :(得分:6)
请勿在{{1}}方法中阻止。听起来你正在这样做。
在OnStart()
方法中创建一个单独的线程,然后离开。
我没有测试过这个,但类似于:
OnStart()
要回答有关事件顺序的问题,只需在每种方法中设置Trace语句。我不确定会有多大帮助。您获得的消息(服务未响应启动请求...)表示在应该相对快速执行的方法中阻塞(或花费太长时间)。