您的位置:首页 > 其它

Windows Workflow Foundation 工作流宿主

2008-11-04 22:23 399 查看
source:http://www.cnblogs.com/wh19890605/archive/2008/11/04/1326573.html

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

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

1.工作流运行时

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

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

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




Code
1 WorkflowRuntime runtime=new WorkflowRuntime();

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

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

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

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




Code
1 WorkflowRuntime workflowRuntime = new WorkflowRuntime();
2
3 SqlWorkflowPersistenceService sqlWorkflowPersistenceService = new SqlWorkflowPersistenceService();
4
5 workflowRuntime.AddService(sqlWorkflowPersistenceService);
6
7 workflowRuntime.StartRuntime();
8
9

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




Code
1 //创建工作流实例
2
3 WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(Demo1.Workflow1),parms);
4
5 //启动工作流
6
7 instance.Start();
8

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

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
将工作流实例从内存卸载到持久性存储区。此调用将进行阻止,直至当前计划的工作完成或事务范围结束。
3.WorkflowEnvironment 类

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

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

WorkBatch:获取当前工作批次。(允许工作流具有事务的功能)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐