Windows Workflow Foundation 工作流宿主

 source:http://www.cnblogs.com/wh19890605/archive/2008/11/04/1326573.html       

 工作流需要一个宿主应用程序才能运行。宿主负责启动并维持工作流,工作流本身不需要了解运行时它所处的宿主是怎样的,然而这个宿主对工作流的生命周期来说却是十分重要的。

                         任何类型的.NET应用程序都可以作为工作流的宿主,一个工作流实例可以由Windows窗体应用程序的一个按钮开始,然后和一个Asp.net Web程序交互。在Windows窗体和Asp.net Web程序中使用相同的工作流实例,这些都被成为宿主。接下来我们了解宿主的几个概念:

  1. 1.工作流运行时

     

    工作流运行时是宿主应用程序和工作流实例之间的通道,对工作流生命周期管理起到了重要作用。

     

    WorkflowRuntime类表示工作流运行时,为管理运行时环境提供了许多功能。有了这个类就可以完全控制工作流实例的执行和运行时本身。

     

    创建WorkflowRuntime实例,如下代码所示  

     

    Code

     

     

    WorkflowRuntime有两个公共方法:StartRuntime和StopRuntime.

     

    当调用StartRuntime的时候,会检查工作流运行时中是否包含(工作流事务服务和工作流调度服务)两个服务之一是否已经被手动添加到运行时中。如果没有,运行时会为每个服务类型创建默认实例。事务服务默认类是DefaultWorkflowCommitWorkBatchService,调度服务默认类是DefaultWorkflowSchedulerService    。当成功实例化这两个服务并将他们添加到运行时后,调用服务的Start方法启动服务。最后,设置工作流运行时的IsStarted属性为true并触发Started事件。

     

    StopRuntime方法将导致工作流运行时引擎卸载其每个工作流实例,停止所有服务,将 IsStarted设置为 false 并引发 Stopped事件。

     

    添加持久化服务,代码如下所示:  

     

    Code

     

    工作流运行时执行的最重要的任务之一就是创建工作流实例。调用WorkflowRuntime的CreateWorkflow方法就能创建一个工作流实例,代码如下所示:

     

    Code

 

               如果WorkflowRuntime类的StartRuntime方法没有被调用,它会在一个工作流实例启动的时候被调用。

  1. 2.WorkflowInstance类

     

    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

将工作流实例从内存卸载到持久性存储区。此调用将进行阻止,直至当前计划的工作完成或事务范围结束。

 

 

  1. 3.WorkflowEnvironment 类
     

    WorkflowEnvironment能够访问正在当前线程上执行的工作流实例的事务上下文。这个类有两个属性: WorkflowInstanceId和WorkBatch。

    WorkflowInstanceId:获取与当前线程关联的工作流实例的GUID。

    WorkBatch:获取当前工作批次。(允许工作流具有事务的功能)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值