首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows服务设计

Windows服务设计
EN

Stack Overflow用户
提问于 2012-06-01 14:28:35
回答 2查看 514关注 0票数 2

想象一下下面的情况。Windows服务不时检查数据库表中的数据。当出现一些新数据时,它将开始处理每一行。

处理由几个逻辑阶段组成,假设如下:

  • 从web服务获得一些附加数据;
  • 通过第1阶段的数据通过web服务查找存在对象或创建新对象;
  • 将所做的操作通知感兴趣的人(包含在第2阶段中找到/创建的对象的详细信息);
  • do smth .

f 29

现在,如果发生任何异常,服务将更新DB行并设置一个标志,指示发生了错误。稍后服务将再次尝试处理该行..。这就是问题所在。

处理将从一开始开始,从第一阶段开始。在这种情况下,如果异常发生在第四阶段,如果它将一次又一次地发生,第三阶段的感兴趣的人将一次又一次地被告知。

在异常情况下完全停止行处理是不可能的,在我的情况下也不可取。理想情况下,如果有一种方法可以从上次失败的阶段开始处理,那就太好了。

现在我需要你的建议如何处理所有这些。事实上,每件事都更加复杂,因为有几种处理模式,不同的阶段等等。

提前谢谢。

更新

是的,我在数据行中有State参数:)它只是暂时不被使用。异常处理对我来说并不是什么新鲜事。

问题是:处理状态切换的最佳方法是什么?换句话说,要明确阶段号和处理方法之间的逻辑联系吗?执行流程可能非常不同,包括针对不同行的不同阶段和方法。

我希望,有更愉快的方式比写无休止的开关/大小写块为每一个新的确定?

EN

回答 2

Stack Overflow用户

发布于 2012-06-01 14:34:57

在您的描述中,有几种模式可以帮助解决每个问题。

  1. 服务检查队列。在您的服务中有一个每1分钟或5分钟运行一次的计时器,检查队列,如果有任何新条目,就开始处理。(参见这里的示例:Best Timer for using in a Windows service)
  2. Following -一系列步骤通常称为工作流。在工作流中,您具有当前状态,并且在每个阶段更新该状态。因此,每一行都将在第一阶段= 1开始。在第一步之后,阶段= 2,等等。在例外情况下,它将在它停止的阶段上,然后在这个阶段上重新开始这个过程,或者不管你的逻辑是什么。此状态将与每一行一起存储,调度代码将检查状态并将服务发送到当前阶段的正确启动代码。也就是说,考虑一组基于status.
  3. Handling异常的If语句是非常简单的。每个工作单元都应该封装在一个try...catch块中。如果出现错误,请记录异常,并根据业务规则标记行。

就实现而言,使用编程最佳实践来保持代码的整洁、模块化、整洁和有序。当您开发解决方案时,请返回特定的问题以获得更多帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-06-01 14:39:16

向数据库表中添加一个字段,跟踪每一行的状态。例如,您可以将这个新字段称为ProcessingState。

在行遍历每个逻辑状态时,您可以更新这个ProcessingState字段,以确定该行处于哪个状态。

服务中的每个逻辑步骤应该只工作处于适当状态的行。

下面是一个例子,假设您有五个逻辑步骤要完成。你可以有以下的州;

  1. 等待状态1.
  2. State 1
  3. 2
  4. State 2

等等。

祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10852149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档