Workflow Runtime
ps:一个AppDomain只能有一个workflowRuntime实例。
表2-1 WorkflowRuntime的属性
属性 | 功能 |
IsStarted | 用来指明workflow运行时是否已经启动并准备接受workflow实例。当宿主调用“StartRuntime”前IsStarted为False。期间它一直维持True直到宿主调用“StopRuntime”为止。需注意的是当它正在运行中你不能增加核心服务。 |
Name | 获取或设置和WorkflowRuntime关联的名字。Workflow运行时正在运行中你不能设置这个属性(也就是说当IsStarted为True)。企图这样做的结果就是抛出一个“InvalidOperationException”异常。 |
表2-2 WorkflowRuntime的方法
方法 | 功能 |
AddService | 为workflow运行时添加指定的服务。能添加的服务类型和时间受到种种限制。关于服务的详细信息将在第五章介绍。 |
CreateWorkflow | 创建一个workflow实例,它包含一些指定(但可选)的参数。假如workflow运行时没有启动,该方法就调用StartRuntime方法。 |
GetWorkflow | 通过 指明workflow实例的标识符(由一个Guid组成)来检索workflow实例。假如这个workflow实例是空闲和持久化保存的,它将被重新加载并执行。 |
StartRuntime | 启动workflow运行时和相关服务,并引发“Started”事件。 |
StopRuntime | 停止workflow运行时和相关服务,并引发“Stoped”事件。 |
表2-3 workflow运行时的相关事件描述
事件 | 功能 |
Started | 当workflow运行时启动后激发。 |
Stopped | 当workflow运行时停止后激发。 |
WorkflowCompleted | 当一个workflow实例完成后激发。 |
WorkflowIdled | 当一个workflow实例进入空闲状态时激发。当workflow实例进入了空闲状态后,你就有机会把他们从内存中卸载掉、存储到数据库并可在稍后的时间把它们加载进内存。 |
WorkflowTerminated | 当一个workflow实例被终止后激发。在宿主中调用一个workflow实例的Terminate方法、或通过一个Terminate活动、或当workflow运行时产生一个未经捕获的异常时都会终止该workflow。 |
工作流实例
表3-1 WorkflowInstance的属性
属性 | 功能 |
InstanceId | 得到workflow实例的唯一标识(一个Guid) |
WorkflowRuntime | 得到本workflow实例的WorkflowRuntime |
方法 | 功能 |
ApplyWorkflowChanges | 通过WorkflowChanges对象申请对workflow实例进行更改。这允许你在workflow执行时修改它(增加、移出或更改活动),当动态的更改实施时,workflow实例会被暂停。 |
GetWorkflowDefinition | 检索本workflow实例的根(root)活动。 |
Resume | 恢复执行先前被暂停的workflow实例。假如workflow实例并未处于暂停状态,则不做任何事情。假如workflow实例处在暂停状态,workflow运行时就会在workflow实例刚被恢复后触发WorkflowResumed事件。 |
Start | 启动一个workflow实例的执行,在这个workflow实例根活动上调用ExecuteActivity。假如Start发生异常,它通过调用Terminate终止这个workflow实例,并附加异常相关信息作为终止的原因。 |
Suspend | 同步暂停本workflow实例。假如workflow实例本就处于暂停状态,则不做任何事情。假如workflow实例正在运行,则workflow运行时就暂停该实例,然后设置SuspendOrTerminateInfoProperty(说明原因)并进入Suspend,触发WorkflowSuspended事件。 |
Terminate | 同步终止本workflow实例。当宿主需要终止workflow实例时,workflow运行时就终止这个实例并试图持久化实例的最终状态。然后WorkflowInstance设置SuspendOrTerminateInfoProperty(说明原因)并进入Terminate。最后,它触发WorkflowTerminated事件并把终止原因传到WorkflowTerminateException中的Message属性并包含到WorkflowTerminatedEventArgs事件参数中。另外,假如在持久化时发生异常,workflow运行时取而代之地就把异常传到WorkflowTerminatedEventArgs事件参数中。 |
ActivityExecutionStatus是一个给定的workflow实例的workflow definition(工作流实例的GetWorkflowDefiniton()方法获得)为您提供workflow的执行状态的枚举。
表3-3 ActivityExecutionStatus枚举值
属性 | 功能 |
Canceling | 活动正在取消中。 |
Closed | 活动已被关闭。 |
Compensating | 活动处于补偿状态。 |
Executing | 活动当前正在运行。 |
Faulting | 活动已产生并维持一个异常。 |
Initialized | 活动已被初始化但还未运行。 |
表4-1 活动(Activity)的属性
属性 | 功能 |
Description | 获取或设置用户定义的关于活动的描述。 |
Enable | 获取或设置一个指明实例能否被执行和验证的值。 |
ExecutionResult | 获取实例最后运行的结果(ActivityExecutionResult)。(有Canceled、Compensated、Faulted、None和Succeeded)。 |
ExecutionStatus | 得到workflow的状态,其为ActivityExecutionStatus的枚举值(Canceling、Closed、Compensating、Executing、Faulting和Initialized)之一。 |
Name | 获取或设置活动实例的名称。 |
Parent | 获取包含本活动的父活动。 |
WorkflowInstanceId | 获取和该活动相关的workflow实例的标识符。 |
表4-2 活动(Activity)的方法
属性 | 功能 |
Cancel | 取消活动的执行。 |
Clone | 返回活动的一个深拷贝。 |
Execute | 以同步方式运行活动。 |
GetActivityByName | 假如在一个组合活动上执行,本方法将返回组合活动中所包含的指定名称的活动。 |
Load | 从一个流中加载一个活动的实例。 |
RaiseEvent | 触发一个和指定的依赖属性相关的事件。 |
RaiseGenericEvent<T> | 触发和所引用的依赖属性相关的事件。RaiseEvent和RaiseGenericEvent的作用是一样的——第一个事件RaiseEvent直接指出DependencyPropenty,而RaiseGenericEvent则是一个泛型版本。 |
Save | 把活动保存到流中。 |
表4-3 选择基本的workflow类型的判定表
workflow类型 | 适用条件 |
顺序工作流 | workflow任务可以自治的执行,很少由外部进行控制。主要由workflow自身来对执行的任务进行控制。只有少量用户或没有用户来和它进行交互。它的root活动是SequentialWorkflow活动。 |
状态机工作流 | workflow任务严重依赖外部来控制和指示其执行。预期有很多的用户交互(或其它外部控制)。对于基于状态的workflow,root活动是StateMachineWorkflow活动。 |
基于规则的工作流 | 业务逻辑中包含复杂的判断条件,既不像顺序工作流也不像状态机工作流。基于规则的工作流或者有一个顺序的root活动,或者有一个基于状态的root活动。 |