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

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - 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预设方式,这点十分头疼,如果有人知道如何来避免这点,请不吝赐教,谢谢!