惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
Security Latest
Security Latest
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
GbyAI
GbyAI
L
LINUX DO - 最新话题
A
Arctic Wolf
T
Tor Project blog
G
GRAHAM CLULEY
I
InfoQ
博客园_首页
IT之家
IT之家
The Register - Security
The Register - Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
U
Unit 42
PCI Perspectives
PCI Perspectives
量子位
P
Palo Alto Networks Blog
S
Securelist
T
Troy Hunt's Blog
博客园 - 【当耐特】
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
罗磊的独立博客
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
NISL@THU
NISL@THU
C
Cisco Blogs
T
Threatpost
有赞技术团队
有赞技术团队
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
T
The Exploit Database - CXSecurity.com
Cloudbric
Cloudbric
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security

博客园 - bobmazelin

Microsoft Robotics Developer Studio基础(一):前言 Microsoft Robotics Developer Studio beta4的大bug Microsoft Robotics Developer Studio4 Beta随想 最近动态记录 走入Microsoft Robotics Developer Studio世界 【工作流】工作流结构模式整理 【工作流】PE中的资源模式的实现方式 【讨论】【工作流】由资源模式中的“权限分配”想到资源结构 【PE】流程图对象以及事件驱动机制的介绍 【讨论】基于WF的流程结构 建立基于WF工作流模式库的设想 2008:再战Business Process Management System(BPMs) bobmazelin的流程管理系统介绍和概念性设计(三) bobmazelin的流程管理系统介绍和概念性设计(二) bobmazelin的流程管理系统介绍和概念性设计(一) AspectNet功能介绍(二) AspectNet功能介绍(一) 在(开发)流程系统之前 在Sequence模式中思考流程资源(数据)问题
【讨论】WF中的异常(错误)处理
bobmazelin · 2008-03-29 · via 博客园 - bobmazelin

本人最近一直在作WF相关的一些工作,遇到一些问题和经验和大家分享和讨论,这次问题集中在异常处理上。
据我了解在WF中,一旦流程实例被开始,无论它的运行是正确的,还是错误的;也不论是系统性错误,还是业务性错误,该实例状态最终会被迁移到Closed状态,并被序列化。当然,其中可能会引发错误事件、取消事件或是补偿性事件。
如此一来就会有一个重大的问题,即
有些异常是可以人工修正的,极端的例子是我们在Debug过程中。而WF不论什么情况都会进入它预设的错误处理流程,最后还会Closed这个实例,以致于一旦有异常,即便我修正了问题,也得重新来过,这点让我很头痛。
我需要的是,有些情况的异常,可以通过认为修正而重新来过,实例数据不会被保存,也不需要补偿之类的;而有些情况则需要现WF的处理方式。
那么如果来实现呢?
我的做法是建立自己独立的异常处理机制,来区分WF预设的方式,两者方式并存。
具体方式如下:
1、我在原先已建立了所有活动的基类中建立Exception属性,作为运行时属性;
2、当有可以重新修正的异常发生(无论是系统性的还是业务性的),都设置此属性,并立即Close该活动;
3、其父活动检测到其Exception属性被赋值也会Close自己,直到根活动;
4、最后会引发序列化服务的开始,这时必须自定义序列化服务,并在Save方法中检测根活动的Exception属性是否被赋值,如果是则忽略序列化动作,并记录异常。
上述方式实现十分简单,使用也较灵活,但是如果你使用WF默认的层次状活动,则异常的传递会非常吃力,而使用我前一篇线性方式,则只需要传递一层即可。

PS:这种方式还有个问题就是需要在所有方法中加入try...catch快捕获异常并设置基类属性,否则还是会进入WF预设方式,这点十分头疼,如果有人知道如何来避免这点,请不吝赐教,谢谢!