2009-04-12 185 views
1

伙计们,长时间运行Windows服务

我想开发一个长期运行的Windows服务(它应该毫无问题地工作了几个月),我不知道什么是更好的选择在这里:

  1. 使用OnStop方法中的一段时间(真)循环
  2. 使用计时器每隔n秒钟打勾并触发我的代码
  3. 任何其他选项?

感谢 埃萨姆

回答

6

我不会做#1。

我要么做#2,要么在OnStart中分离出一个单独的线程来完成实际的工作。

6

只要不是#1
服务管理器(或用户,如果他是一个激活控件)预计OnStart()OnStop()到及时返回。
通常的做法是开始自己的线程,使事情保持运行,并听取可能告诉它停止的事件。

+0

单独线程方式的+1 - 这是要走的路! – 2009-04-12 18:06:34

1

我不会推荐#1。

我在过去为完全相同的场景/情况所做的事情是创建一个计划任务,运行N秒钟,启动一个小脚本,只是做这两件事:#1检查“IsAlreadyRunning”标志(从数据库中读取)#2如果标志为真,那么脚本立即停止结束出口。如果该标志为false,则脚本在新线程中启动一个单独的进程(exe)(使用服务执行可能非常短或有时非常长的任务,具体取决于要处理的记录量)。这个过程当然会设置并重置IsAlreadyRunning标志,以确保线程不会触发重叠的操作。我有一种多年来一直使用这种方法运行的服务,我从来没有遇到任何问题。我的主要过程利用Web服务和其他一些东西来执行一些重要的备份操作。

0

难道做一个

1清理任务,或

2醒来,看看是否需要运行任务

如果是像#2,然后使用MSMQ会更合适。 MSMQ任务几乎可以立即完成。

2

不要搞乱服务控制器代码。如果该服务想要停止,您只会使用#1使事情变得更糟。顺便说一句,服务可以总是崩溃,在这种情况下,你的while(true)不会帮你一件事情。

如果你真的想拥有一个“运行Windows服务(它应该毫无问题地工作了好几个月)”,你最好确保自己的代码是正确彻底使用单元测试和集成测试测试之前你运行它作为一项服务。

相关问题