工作流需要一个宿主应用程序才能运行。宿主负责启动并维持工作流,工作流本身不需要了解运行时它所处的宿主是怎样的,然而这个宿主对工作流的生命周期来说却是十分重要的。
任何类型的.NET应用程序都可以作为工作流的宿主,一个工作流实例可以由Windows窗体应用程序的一个按钮开始,然后和一个Asp.net Web程序交互。在Windows窗体和Asp.net Web程序中使用相同的工作流实例,这些都被成为宿主。接下来我们了解宿主的几个概念:
工作流运行时是宿主应用程序和工作流实例之间的通道,对工作流生命周期管理起到了重要作用。
WorkflowRuntime类表示工作流运行时,为管理运行时环境提供了许多功能。有了这个类就可以完全控制工作流实例的执行和运行时本身。
创建WorkflowRuntime实例,如下代码所示
WorkflowRuntime有两个公共方法:StartRuntime和StopRuntime.
当调用StartRuntime的时候,会检查工作流运行时中是否包含(工作流事务服务和工作流调度服务)两个服务之一是否已经被手动添加到运行时中。如果没有,运行时会为每个服务类型创建默认实例。事务服务默认类是DefaultWorkflowCommitWorkBatchService,调度服务默认类是DefaultWorkflowSchedulerService 。当成功实例化这两个服务并将他们添加到运行时后,调用服务的Start方法启动服务。最后,设置工作流运行时的IsStarted属性为true并触发Started事件。
StopRuntime方法将导致工作流运行时引擎卸载其每个工作流实例,停止所有服务,将 IsStarted设置为 false 并引发 Stopped事件。
添加持久化服务,代码如下所示:
工作流运行时执行的最重要的任务之一就是创建工作流实例。调用WorkflowRuntime的CreateWorkflow方法就能创建一个工作流实例,代码如下所示:
如果WorkflowRuntime类的StartRuntime方法没有被调用,它会在一个工作流实例启动的时候被调用。
WorkflowInstance类以实例的形式表示所有的工作流。可以将它看作一个工作流实例的外包装。
得到一个新的工作流实例的方法是调用WorkflowRuntime的CreateWorkflow方法,这点在上文已经提到过,调用CreateWorkflow不会启动这个工作流,只有当WorkflowInstance的Start方法被调用以后,才会启动工作流。
下面列出了WorkflowInstance类的方法:
|
|
名称 |
说明 |
|
|
Abort |
中止工作流实例。 |
|
|
ApplyWorkflowChanges |
将更改应用到 WorkflowChanges 对象所指定的工作流实例。 |
|
|
EnqueueItem |
将消息同步发送到指定工作流队列。 |
|
|
EnqueueItemOnIdle |
当工作流处于空闲状态时,将消息发送到指定的工作流队列。在确认工作流计划程序处于空闲状态(即没有执行任何有效操作)之后,EnqueueItemOnIdle将一直等待,直至工作流达到空闲点并编排队列。 |
|
|
Equals |
返回一个值,该值指示指定对象是否等于 WorkflowInstance。 (重写 Object..::.Equals(Object)。) |
|
|
Finalize |
允许 Object 在"垃圾回收"回收 Object 之前尝试释放资源并执行其他清理操作。 (继承自 Object。) |
|
|
GetHashCode |
返回此工作流实例的哈希代码。 (重写 Object..::.GetHashCode()()()。) |
|
|
GetType |
获取当前实例的 Type。 (继承自 Object。) |
|
|
GetWorkflowDefinition |
检索此工作流实例的根活动。 |
|
|
GetWorkflowNextTimerExpiration |
返回下一个时间点,已计划在此时间点向此 WorkflowInstance传递计时器消息。 |
|
|
GetWorkflowQueueData |
获取 WorkflowQueueInfo对象的集合,该集合包含与此工作流实例关联的工作流队列的挂起项和订阅活动。 |
|
|
Load |
加载先前卸载的工作流实例。 |
|
|
MemberwiseClone |
创建当前 Object 的浅表副本。 (继承自 Object。) |
|
|
ReloadTrackingProfiles |
重新加载此工作流实例的跟踪配置文件。 |
|
|
Resume |
继续执行先前挂起的工作流实例。 |
|
|
Start |
开始执行工作流实例。 |
|
|
Suspend |
挂起工作流实例。 |
|
|
Terminate |
以同步方式终止工作流实例。 |
|
|
ToString |
返回表示当前 Object 的 String。 (继承自 Object。) |
|
|
TryUnload |
当实例处于挂起或空闲状态时,将工作流实例从内存卸载到持久性存储区。 |
|
|
Unload |
将工作流实例从内存卸载到持久性存储区。此调用将进行阻止,直至当前计划的工作完成或事务范围结束。 |
WorkflowEnvironment能够访问正在当前线程上执行的工作流实例的事务上下文。这个类有两个属性: WorkflowInstanceId和WorkBatch。
WorkflowInstanceId:获取与当前线程关联的工作流实例的GUID。
WorkBatch:获取当前工作批次。(允许工作流具有事务的功能)
浙公网安备 33010602011771号