几年前,我在 XP 上构建并部署了一个系统,该系统涉及一个自定义编写的服务,该服务与本地 2008 SQL Express 实例(也具有 CLR 依赖性)进行通信。当时,我将自定义服务设置为依赖于 Express 服务的启动,一切似乎都很好。
快进到本周,我的客户打电话给我,让我调试为什么事情不能正常工作(显然已经有一段时间没有正常工作了 - 这是一个很长的故事)。
我发现,重启机器后,10 次中有 7 次一切都会正常。而那 3 次出现故障时,我的定制服务会抱怨以下事情:
- 无法连接到 SQL 实例
- SQL 实例抱怨 CLR 子系统未启用
- 执行查询时 SQL 实例超时
但是当我手动重新启动我的自定义服务时(在计算机重新启动之后),它没有出现错误。
因此,当 XP 说 SQL Express 系统已启动并运行时,它有时似乎并未完全启动并运行,并且存在意外的竞争条件,这会破坏我对 XP 服务依赖顺序的假设。
我的问题是:
What does it mean when the SQL Express instance announces to the XP service system that it is up and running?
Does it mean all components have been initialized and are ready to work, or is more of a "Hello world" statement?
最后,我还注意到我的客户在电脑上安装了其他几款软件,这些软件可能暴露/导致了我所看到的竞争条件。是的,我们也开始讨论如何将他们从 XP 转移到 W7。
答案1
一个选项是设置服务的恢复选项。服务失败后,让它在短时间后重新启动。