2016-08-04 52 views
0

我有一个C#windows服务在Windows 2012 R2标准版上运行。 我们每天都使用服务控制管理器(SCM)停止和启动此服务,并且过去一直运行良好。控制.Net窗口服务中的问题

但最近,我们看到其中一个行为:

1.我们需要增加启动超时并停止该服务

2.Also的功能,当我们试图以停止服务,我们看到SCM中的停止按钮(以及启动按钮)变灰,因此这迫使我们去任务管理器,终止服务并重新启动它。

只是想知道这是什么原因。

显然,这似乎是在服务的构造函数中添加以下代码后,最近开始:

foreach (Product p in Products) 
      { 
       Parallel.Invoke(() => {//Call a third part web service1} 
     Parallel.Invoke(() => {//Call a third part web service2} 
    } 

(产品清单是200这里)

所以需要知道,如果这个特殊的代码变化真的是这种行为的原因??请指教。

感谢您的帮助。

回答

1

您的通话Parallel.Invoke似乎毫无意义,你只能调用从调用一个动作,也就是造成你的代码等同于

foreach (Product p in Products) 
{ 
     {//Call a third part web service1} 
     {//Call a third part web service2} 
} 

你可以看到为什么,可能需要一段时间才能运行。

然而,即使你修复了这个问题,仅仅因为它并行并不意味着它很快。不要在构造函数中做繁重的工作,在OnStart中产生一个新线程并在那里完成这项工作。

+0

Ok.Thanks.And我们如何解释停止按钮显示为灰色的原因? –

+0

一旦服务处于“故障”状态需要很长时间,整个系统就会崩溃,它会停止尝试与服务对话。 –