gpt4 book ai didi

c# - 在依赖 Oracle 的 Windows 启动时自动启动 Windows 服务

转载 作者:可可西里 更新时间:2023-11-01 13:06:35 27 4
gpt4 key购买 nike

我开发了一个 Windows 服务,它必须在 Windows 启动时自动启动。此服务连接到 Oracle 数据库,因此我通过 sc 命令行实用程序使我的服务依赖于 Oracle 服务:sc config MyService depend=OracleServiceXE/OracleXETNSListener

到目前为止一切顺利,依赖设置成功。但是当 Windows 启动时,我的服务无法启动,我收到以下 (Oracle) 错误消息:“ORA-12528: TNS:listener: all appropriate instances are blocking new connections”。

正如我所想,Oracle 服务在我的服务启动时启动,但它们并未“完全初始化”。几秒钟后,我可以毫无问题地从服务控制台启动我的服务。

那么,如何在依赖于 Oracle 数据库连接的 Windows 启动时自动启动我的服务?

我的服务是在 .Net 4 平台上,在 VS 2010 环境中用 C# 开发的。

请。帮助我,这对我来说是一项非常重要的任务!

最佳答案

请记住,您的服务启动代码应该尽可能少。换句话说,不要让您的服务启动检查 Oracle 服务器的可用性,或者做任何事情。让您的服务执行以下操作:

  • 记录它已经开始的事实
  • 从配置文件/注册表/等加载任何适用的配置
  • 启动一个线程,该线程将每隔 N 秒尝试正确“启动”服务,并重复 M 次直到它放弃。从您的配置文件/注册表中配置 N 和 M

让线程“尝试”连接到适用的 Oracle 服务器,如果失败,则休眠 N 秒,并执行 M 次。如果成功,它就可以开始做它应该做的“实质性工作”。

具有讽刺意味的是,问题的根源可能是 Oracle 服务执行的操作与我建议您执行的操作类似。通过在 Windows 启动时快速返回“是的,我已经开始”,它允许您的服务随后被加载,即使 Oracle 仍在忙于启动。理想情况下,在这种情况下,Oracle 不应拒绝您的请求,而应在准备就绪时将它们排入队列进行处理。

关于c# - 在依赖 Oracle 的 Windows 启动时自动启动 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6161510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com