【问题标题】:How to Synchronize Windows Service Access to SQL Server Database on Startup?如何在启动时同步 Windows 服务访问到 SQL Server 数据库?
【发布时间】:2010-05-03 21:30:12
【问题描述】:

我有一个作为 Windows 服务运行的 WCF 服务。一旦 WCF 服务启动,它将尝试连接到数据库并进行一些初始化处理。

我在重新启动机器时遇到问题(wcf 服务设置为自动启动),由于 sql 太忙,该服务会出现异常。因此,似乎 sql 正在尝试启动,同时我的服务正在尝试与之通信。

现在,我做了一些类似 try/catch 的操作,我在 catch 中睡眠了 10 秒,然后我再次重试,直到我的初始化成功。

这很好用。但我正在寻找更优雅的解决方案。

我不想在我的 Windows 服务上设置对 sql 的依赖,因为该服务可以安装在与数据库不同的机器上。

【问题讨论】:

    标签: c# .net wcf windows-services


    【解决方案1】:

    您可以在部署服务时尝试配置服务的“恢复”选项,以便在加载失败时自动重启。您可以通过 SC.EXE 命令行工具、WMI 或通过服务属性 (services.msc MMC) 手动执行此操作。

    尝试 [n] 次,在重试之间有一定的时间间隔,如果仍然无法连接,则最终失败之前,如果您考虑监控和警报,这不是一个糟糕的解决方案。

    实际上未能启动的服务会将警告/错误事件写入 Windows 事件日志,如果它只是等待依赖项可用,则可能会触发您可能不希望的监视和警报行为,它最终会恢复的。

    HTH,

    Z

    【讨论】:

    • 谢谢,恢复是一个选项,只是在部署到客户端时仍有可能忘记配置。所以我想我会尝试 n 次直到失败。
    • 自动部署您的服务,包括配置任何依赖项或恢复选项,然后您不必担心忘记执行此操作。 :)
    • 我们正在使用 Visual Studio 中的设置项目模板来构建我们的 msi。是否可以使用安装项目配置恢复选项?
    • 我确定是这样,但我不确定你会怎么做——我们不使用 MSI 安装我们的服务。我们使用 msbuild 来编排每台服务器上的任务(例如复制文件、安装服务等)。如果您坚持构建 MSI,我听说 WIX 项目非常适合创建这些 MSI。我认为这是它的项目位置:sourceforge.net/projects/wix
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多