【发布时间】:2012-06-01 14:28:35
【问题描述】:
想象以下情况。 Windows 服务会不时检查数据库表中的数据。当一些新数据出现时,它开始处理每一行。
处理由几个逻辑阶段组成,顺其自然:
- 从网络服务获取一些额外的数据;
- 通过 Web 服务通过阶段 1 的数据找到一个存在的对象或创建一个新对象;
- 将已完成的操作告知感兴趣的人(包括在第 2 阶段找到/创建的对象的详细信息);
- 做别的事。
现在,如果发生任何异常,该服务会更新 DB 行并设置一个标志,指示发生了错误。一段时间后,服务将尝试再次处理该行......这就是问题所在。
处理将从一开始,从阶段 1 开始。在这种情况下,如果在阶段 4 发生异常并且它会一次又一次地发生,则将一次又一次地通知来自阶段 3 的感兴趣的人......
在出现异常的情况下完全停止行处理是不可能的,在我的情况下也不可取。理想情况下,如果有一种方法可以从上次失败的阶段开始处理,那就太好了。
现在我需要您的建议,如何处理所有这些问题。事实上,一切都更加复杂,因为有几种处理模式,不同的阶段数等等。
提前致谢。
更新
是的,我在数据行中有 State 参数 :) 它只是暂时不使用。而且异常处理对我来说并不是什么新鲜事。
问题是:处理状态切换的最佳方式是什么?换句话说,要在阶段编号和处理方法之间建立清晰的逻辑联系?执行流程可能非常不同,包括针对不同行的不同数量的阶段和方法。
我希望,有比为每个新情况编写无尽的 switch/case 块更令人愉快的方法吗?
【问题讨论】:
-
供参考:如果您拥有服务的主要原因是“不时”运行一些东西,那么您需要的可能不是 Windows 服务,而是计划任务。跨度>
标签: c# .net design-patterns windows-services