我有一个作为Windows服务运行的WCF服务。一旦WCF服务启动,它将尝试连接到DB并进行一些初始化处理。
我在重新启动计算机时遇到问题(wcf服务设置为自动启动),因为sql繁忙,服务会出现异常。因此,似乎sql正在尝试启动,同时我的服务正在尝试与之通信。
现在,我做了类似try / catch的事情,我在我的捕获中睡了10秒,然后我再次重试,直到我的初始化成功。
这非常有效。但我正在寻找更优雅的解决方案。
我不想在我的Windows服务上设置对sql的依赖,因为该服务可以安装在与DB不同的机器上。
答案 0 :(得分:1)
您可以尝试在部署服务时配置服务的“恢复”选项,以便在无法加载时重新启动服务。您可以通过SC.EXE命令行工具WMI执行此操作,也可以通过服务属性(services.msc MMC)手动执行此操作。
如果考虑监控和警报,尝试[n]次,在重试之间有一些时间间隔,如果仍然无法连接,最终失败并不是一个糟糕的解决方案。
实际失败启动的服务会将警告/错误事件写入Windows事件日志,可能会触发您可能不想要的监视和警报行为,如果它只是等待依赖项可用,它最终会恢复。
HTH,
ž