WinService有时无法在启动后启动

时间:2013-06-05 12:11:58

标签: c# wcf windows-services wix boot

我有一些Windows服务(全部用C#编写)都表现出同样的奇怪行为。 我让它们设置为延迟自动启动,以便它们在启动后启动(延迟因为它们并不重要)。 它们都将WCF服务作为客户端 - 服务器应用程序的一部分托管,如果重要的话,使用WiX进行安装。

我注意到有时他们只是没有开始。 如果在OS准备就绪后足够快地查看“服务”窗口,则它们的状态为“正在启动”。然后,如果您刷新视图,它们将不再启动,但也不会“启动”。 然后,您可以手动启动它们而不会出现任何问题。

这不会产生错误消息,也不会记录日志。为了使其更好,只有在机器关闭并再次打开时才会出现这种情况。重启每次都很好(在两台不同的机器上试了大约20次)

如果您设置失败操作以在失败后重新启动服务,它似乎最终会成功启动服务,但这肯定不是理想的解决方案。

操作系统是Windows 7和WinServer 2008 R2

我在这里缺少什么?为什么它们无法自动启动(至少是第一次)?如果计算机在重启或关机后启动,为什么会有所不同?

修改 关于失败行为,我错了。没有解决问题。

编辑2: 我在所有内容中添加了异常处理以记录可能的异常。但到目前为止还没有记录任何例外情况。

2 个答案:

答案 0 :(得分:2)

可能是WCF服务需要很长时间才能启动? afaik,Windows服务必须在一定时间内出现(最佳做法是30秒,技术限制我不知道)不要超时。这可以解释为什么您的服务处于“开始”状态但未启动。

答案 1 :(得分:0)

请从副本中查看我的答案。出于安全原因,Windows服务通常不应该访问桌面。但它肯定应该有大量的日志记录。你可能有竞争条件。在WiX中你唯一能做的就是表达对另一个服务的依赖,让服务控制管理器在启动服务之前等待一段时间。但如果您的代码更强大,那真的会更好。一个例子是OnStart事件启动后台工作进程然后返回成功。然后,后台线程可以继续尝试托管WCF端点,并且所有内容都会在此过程中进行大量的日志记录。