在Windows启动时自动启动Windows服务,该服务依赖于Oracle

时间:2011-05-28 12:00:46

标签: c# windows oracle service

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

到目前为止,依赖是成功的。但是当Windows启动时,我的服务无法启动,我收到以下(Oracle)错误消息:“ORA-12528:TNS:listener:所有适当的实例都阻止了新的连接”。

我认为,Oracle服务是在我的服务启动时启动的,但它们并未“完全初始化”。几秒钟后,我可以毫无问题地从服务合作开始我的服务。

那么,如何在Windows Startup上自动启动依赖于Oracle DB连接的服务?

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

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

1 个答案:

答案 0 :(得分:10)

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

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

让线程“尝试”连接到适用的Oracle服务器,如果失败,请暂停N秒,并执行M次。如果它成功,它就可以开始做它应该的“肉”。

具有讽刺意味的是,这可能是因为Oracle服务的功能与我提出的类似,这会导致问题。通过在启动时返回“是,我已经开始”快速返回到Windows,它允许您的服务随后被加载,即使Oracle仍在忙着进行操作。理想情况下,在这种情况下,Oracle应该排除它们的请求,而不是拒绝您的请求。

相关问题