在Windows workflow里实现人工活动

虽然Windows workflow是实施业务流程处理的一个优秀框架,但它却缺乏对人工活动的直接支持。 微软虽然发布了几种方法来解决这个问题,但这些方法却显得不够通用。本文将定义一种完全通用的方法,在WF中实现对人工活动的支持。

支持人工交互的复杂性带来众多的挑战,如下所列,可见一斑:

用户的响应时间(用户活动的执行时间)是不可预知的。

当请求发生的时候用户可以不连接到系统,因此需要存储请求,并当用户登录到系统之时提交给用户。

在不同的机器上可以有多个同时运行的工作流程。但是用户通常需要一个所有任务的统一视图。

业界已经认识到了这些问题,并制定了两个主要的规格来解决这些问题。我们将根据以下思想来构建人工活动的实现,而不是纸面上的规格说明书。

一个解决方案的组件视图

整体解决方案的主要组件如图1所示。


图1 解决方案组件

解决方案的核心是一个工作队列管理器。这是一个集中的服务,负责跟踪系统所有用户的所有任务。任何需要人工交互活动的工作流程(或者服务/应用程序所包含的工作流程),都去调用一个自定义的工作流活动,以通过它将请求提交到工作队列管理器,并对其进行持久化,同时允许系统的其他组件与这些请求一同协作。这样,工作队列管理器就成为了工作流引擎和人工活动执行之间的解耦层。在工作流执行期间,如果用户并不存在于系统中,这种方法同样提供了支持。同时,工作队列管理器通过形成的集中服务,可以将所有任务与指定的用户结合,而不用考虑是从哪里初始化的流程。因为不同的用户任务可以要求不同的输入信息以及产生不同的输出,工作流和人工活动之间的通信采用了XML进行输入输出,从而可以处理任何可能的请求和响应。虽然使用XML似乎会增加实现上的复杂度,但.NET对XML序列化的良好支持,使得XML和对象之间的映射易如反掌。工作队列查看器是一个GUI应用程序,允许用户直观地查看输入的已经准备就绪的所有任务。该应用程序是通用的,仅仅显示了任务的基本要素,包括名称,类型,优先级,创建者等等。根据队列中的这些信息,用户可以决定执行某一项特定的任务。任务的实际处理过程是通过一个在功能上支持给定任务的任务应用程序来完成的。一个工作流队列管理应用程序提供了一个用户界面,用来支持对工作队列管理器的管理。它可以查看和修改现有的人工任务,查看它们的历史记录等。最后,一个人工活动就是一个自定义活动(参看边栏“Windows Workflow Foundation 组件模型”,它实现了与任务队列管理器的通信,并为工作流开发人员展现了一个非常简单的针对人工任务执行的编程模型。从人工交互的角度来看,这与常规的服务调用并无二致。

Windows Workflow Foundation 组件模型

正如[11]所描述的,Windows Workflow Foundation (WWF)的实现不同于当下主流工作流实现的可执行工作流语言(域语言)。在WWF中,“过程图中的活动关联了一个实现该活动运行时行为的组件,组件由一种通用编程语言实现。过程语言中的每一个活动都对应一个实现组件。例如,一个Web服务调用活动,一个人工任务活动或一个电子邮件活动都对应一个实现组件 ”。

因此,我们能够非常容易地通过引入新的活动类型扩展WWF,以实现特定情况下的(在我们的案例中,就是人工任务的活动)运行时行为,通过实现新的活动这种方法,使得构建或者扩展现有的过程语言非常简单。

组件之间的整体交互如序列图所示(图2)


图2 序列图

我们可以看到,上面的整体解决方案里包含两种类型的组件:

通用的,包括人工活动,工作队列管理器和工作队列查看器。这些组件运行于人工任务的“标准”特性(attributes )之上,并将任务的输入输出视为通用的XML。

特殊的,包括工作流本身和处理业务流程的应用程序,实现了特定业务对象的XML序列化/反序列化,并使用这些对象实现他们的功能。

本文只讨论通用组件的解决方案。

工作队列管理器服务接口和功能

正如我们在前面所定义的那样,工作队列管理器是一个集中的服务。它的功能基于数据契约,如图3所示。


图3 工作队列管理器数据契约

时间: 2024-10-29 05:48:14

在Windows workflow里实现人工活动的相关文章

Windows Workflow: 构建自定义活动以扩展您的工作流的作用范围

本文基于 .NET Framework 3.0 的预发布版本撰写而成.文中包含的所有信息均有变更可能. 本文讨论: 构建基本活动和复合活动 异步和基于事件的活动 自定义设计体验 验证和错误处理 本文使用了以下技术: .NET Framework 3.0 自定义工作流 活动是 Windows Workflow Foundation 的其中一个最重要的方面,在构建它们时需要考虑许多功能 .Don Box 和 Dharma Shukla 在他们于 2006 年 1 月撰写的文章"使用 Windows

Windows Workflow Foundation

在 2006 年 1 月号中,Don Box 和 Dharma Shukla 介绍了 Windows Workflow Foundation,并讨论了框架的整体体系结构及其构成组件(请参阅 WinFX Workflow:Simplify Development With The Declarative Model Of Windows Workflow Foundation [英文]).这篇文章促使我想进一步讨论这个主题,并介绍如何使用 Windows Workflow Foundation 来

Windows Workflow Foundation中的跟踪服务

目录 跟踪体系结构 跟踪配置文件 SQL 跟踪服务 查询跟踪数据 自定义跟踪服务 Windows Workflow Foundation 中最强大的功能之一是跟踪.它使您能够监控事件.活动属性以及您的工作流中的自定义数据.在本专栏中,我将检查跟踪基础结构.向您介绍如何使用内置的基于 SQL Server 的跟踪服务以及如何为各种应用创建自定义跟踪服务.顺着这一思路,我将演示如何使用所跟踪的信息以及如何通过使用跟踪来满足一些常见的需求. 许多应用程序需要了解程序逻辑和处理步骤的执行.这有助于企业遵

Windows 2003安装和配置活动目录服务

window 在Windows 2003中,各种网络服务以服务器角色出现,方便了用户对网络资源进行分配与管理.应用服务器角色对网络进行管理,均需要有活动目录服务.域名系统服务.动态主机配置协议服务.Windows Internet命名服务的配合与支持.本文将向你重点讲解上述活动目录服务务的实现方法与技巧. (一)什么是活动目录 活动目录(Active Directory)是用于Windows 2003的目录服务.它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用.活动目录服务

windows azure 里面的ftp怎么发布到公网上???

问题描述 windows azure 里面的ftp怎么发布到公网上??? windows azure 里面的ftp怎么发布到公网上??? 解决方案 在默认的配置下,安装好iis和ftp,打开防火墙允许21端口,以及在azure的门户中endpoint那里添加21端口,tcp协议,即可. 解决方案二: 这个主要是在你的azure的管理页面中打开机器对应端口的访问权限,开放给外网机器访问. 解决方案三: Hi 如果您是想在Azure虚拟机中配置可供外网访问的ftp服务器的话,我们首先需要安装iis和

应用- windows azure里的SSAS

问题描述 windows azure里的SSAS windows azure里的SSAS我们计划移动现有的SSAS应用到云中,现在有几个问题:VM图像必须在windows serve 2008R2,Hyper-V中产生吗?我们能从azure中直接得到VM从而设置SSAS应用吗? 解决方案 你好,Azure 自带的images 里面也有SQL server 的呀.可以直接在Azure 上创建虚拟机来设置SSAS.你可参考以下文档:SQL Server Business Intelligence i

windows apache配置Active Directory活动目录

问题描述 windows apache配置Active Directory活动目录 apache安装在windows server 2008系统下,此版本的apache如何配置active directory活动目录,实现登录自动认证? 解决方案 http://wenku.baidu.com/link?url=m2XF-Cq4hNbawmufc4Xmo8fbTKxaJK5P-v27f_ROP1SHsnP8Dv_kcnhTgkIjMAinUGUtqfYLBSSfFHkYRH3I_tKM2WKv1I

备份-求大神告诉我为什么我下面这个批处理复制时唯独windows目录里的文件拷贝不出来 试过右键管理员

问题描述 求大神告诉我为什么我下面这个批处理复制时唯独windows目录里的文件拷贝不出来 试过右键管理员 echo off set /p zf= 输入字符(如 .txt;a.txt;???s.*): set /p lj= 设置你要备份的路径(如 c:): md %lj% for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (for /f "tokens=*" %%i in ('dir /a-d /b

怎么把java日志写到windows系统日志里啊?还有怎么生成一vbs了

问题描述 怎么把java日志写到windows系统日志里啊?还有怎么生成一vbs了 解决方案 解决方案二:这样有什么好处呢