【发布时间】:2010-12-27 03:44:23
【问题描述】:
我有一个作为 Windows 服务托管的 WCF 服务。 WCF 服务在同一台服务器上使用 msmq 队列。
当服务器重新启动时,我的 WCF 服务在 msmq 服务之前启动。这会使我的 WCF 服务处于故障状态。
处理此问题的最佳方法是什么?我应该设置对 msmq 服务的依赖关系吗?有没有办法从 wcf 服务处理这个问题?
【问题讨论】:
我有一个作为 Windows 服务托管的 WCF 服务。 WCF 服务在同一台服务器上使用 msmq 队列。
当服务器重新启动时,我的 WCF 服务在 msmq 服务之前启动。这会使我的 WCF 服务处于故障状态。
处理此问题的最佳方法是什么?我应该设置对 msmq 服务的依赖关系吗?有没有办法从 wcf 服务处理这个问题?
【问题讨论】:
您可以使用服务依赖项指定启动顺序。即停止 WCF 服务在 MSMQ 服务之前启动。见:https://serverfault.com/questions/84181/can-the-startup-order-for-windows-services-be-configured-if-so-where
【讨论】:
您可以在设计时在 NamedServiceInstaller 类中执行此操作,在 ServicesDependedOn 属性中为您想要启动的每个服务添加一个带有服务名称的字符串。
【讨论】:
ServiceInstaller serviceInstaller = new ServiceInstaller();
// Adding this property to your ServiceInstaller forces
// your service to start after MSMQ.
serviceInstaller.ServicesDependedOn = new string[] { "MSMQ" };
【讨论】:
如果您使用的是 Windows Server 2008,则将服务启动类型设置为自动(延迟启动)可能是另一种选择。这将在您的 WCF 托管服务之前启动 MSMQ 服务。
但我认为 Shiraj 设置依赖项的答案更好。
【讨论】: