0

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

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

这不会产生错误消息和日志条目。为了让它变得更好,只有在机器关闭并再次打开时才会发生这种情况。每次重新启动都可以正常工作(在两台不同的机器上尝试了大约 20 次)

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

操作系统为 Windows 7 和 WinServer 2008 R2

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

编辑: 我对失败的行为是错误的。没有解决问题。

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

4

2 回答 2

2

Might it be the WCF Services take a long time to start? afaik, the windows service has to come up in a certain time (best practices is 30 seconds, technical limit I don't know) to not time out. That could explain why your service is in status "starting" but does not start.

于 2013-06-12T09:08:01.630 回答
0

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

于 2013-06-05T13:34:58.970 回答