2009-07-15 72 views
1

我有一个执行长时间运行的进程的Windows服务。它由计时器触发,整个过程可能需要几分钟才能完成。当计时器过期时,服务实例化执行各种任务的管理对象,记录结果然后退出。关闭Windows服务中的长时间运行进程

我还没有实现任何处理这些情况时,服务器在过程中关闭。这可能会导致一些问题。处理这个问题的最佳做法是什么?

回答

0

只能给出模糊的建议,因为我不知道你实际上在做什么任务。

如果是w/database的事情,有事务可以回滚,如果它没有提交。

如果涉及到一些文件操作,或许看看this关于Transactional NTFS的文章。您可以将它与W/TransactionScope对象结合使用以确保原子事务。

如果您正在处理Web服务,那么服务边界将决定何时一个事务开始/结束以及另一个事务开始时,使用补偿模型(如果您打破了某个部分,则需要稍后提供一种方法(考虑在线订购书籍以及如何处理缺货,取消等)

对于追踪机制,记录每个步骤和时间表如果发生类似关机的故障,则排除故障

0

如果您基本上描述了一个批处理过程,那么可以有一个定时器在一个间隔内工作 - 很多世界d以这种方式工作。

如果长时间运行,请尽量让您的工作单元或批次足够小,以至于您的过程至少可以检查是否已通知其停止与否。这将允许服务优雅地退出,而不是基本上忽略服务停止消息。

在你的计时器函数的某个地方,你有一个属性,IsShutdownRequired或者其他的,你的检查(假设一些循环处理)。该属性在服务停止控制消息中设置为true,它允许您的流程通过不尝试做更多工作或者如Jimmy所建议的那样,在事务中回滚该工作时正常退出。

理想情况下,较小的批次会比一个大的更好。