惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
有赞技术团队
有赞技术团队
L
LangChain Blog
C
Check Point Blog
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
美团技术团队
博客园 - 司徒正美
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
腾讯CDC
B
Blog
G
Google Developers Blog
The Cloudflare Blog
P
Proofpoint News Feed

博客园 - Tam

ASP.NET 验证控件 IIS 7.0集成模式中Application_Start不能使用HttpContext.Current log4net - 4步快速配置跟踪日志(ASP.NET) Windows Workflow Foundation - [介绍及相关资源] TortoiseSVN 安装使用 VS2005里三种有用的调试方法 使用Iframe时要注意的一个问题 - Tam - 博客园 必须要知道的GridView用法(1) 试用Code Snippets Manager 学习使用ASP.NET 2.0的本地化 XSLT 运算符 和 记录一些用过的语句 IIS里面设置好虚拟目录后访问出现Server Application Unavailable 转载:如何在自己的网站上做天气预报? - Tam - 博客园 Linux Shell Record 在VMWARE上安装Fedora Core 5遇到的错误 DCOM错误 TASTE CSS DESIGN ASP.NET 传递参数到XSLT - Tam - 博客园 ASP.NET中如何知道文件是否被下载过?
Windows Workflow Foundation - [Workflow Runtime]
Tam · 2008-01-08 · via 博客园 - Tam

2008-01-08 17:55  Tam  阅读(750)  评论()    收藏  举报

Workflow Runtime

从图上可以看到,WorkflowRuntime可以看作是应用程序和Workflow实例之间的一个通道,它托管在进程里面,因此使得工作流和托管它的应用程序打交道变得容易。在WorkflowRuntime里面,我们可以加载不同的服务,包括跟踪服务,持久化服务等等,甚至我们能根据不同需求编写自己的服务。

WorkflowRuntime位于System.Workflow.Runtime.WorkflowRuntime名称空间下,该类主要职责为以下4点:

1.       管理Workflow运行时

2.       启动和管理工作流实例

3.       管理运行时的服务

4.       处理 运行时的事件

如何创建WorkflowRuntime?
    在每个AppDomain上只能有一个WorkflowRuntime实例,因此,我们使用Singleton
模式来建造这个类。

 1public static class WorkflowFactory
 2{
 3        private static WorkflowRuntime _workflowRuntime = null;
 4        private static object _syncObj = new object();
 5
 6        public static WorkflowRuntime GetWorkflowRuntime()
 7        {
 8            lock (_syncObj)
 9            {
10                if (_workflowRuntime == null)
11                {
12                    _workflowRuntime = new WorkflowRuntime();
13                }

14                return _workflowRuntime;
15            }

16        }

17}

18


 

当类实例化之后,我们可以通过workflowRuntime.AddService()方法把许多不同的服务加载到WorkflowRuntime里(如何添加需要的服务将在后面详细说明)

下面列出WorkflowRuntime一些常用的事件:

事件名

注释

Started

Workflow Runtime 开始时触发。

Stopped

Workflow Runtime 停止时触发。

WorkflowCompleted

当工作流实例完成时触发。

WorkflowIdled

当工作流实例进入空闲时触发(当实例变成空闲的时候,我们可以把该实例存放到数据库,然后从内存中卸载)。

WorkflowTerminated

当工作流实例终止时触发(触发该事件有两种情况,一是运行的时候我们调用了Terminate方法,另外一种情况是运行时发生了异常)。

订阅事件代码如下:

1workflowRuntime.Started += new EventHandler<WorkflowRuntimeEventArgs>(workflowRuntime_Started);
2workflowRuntime.Stopped += new EventHandler<WorkflowRuntimeEventArgs>(workflowRuntime_Stopped);
3                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); };
4                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
5{
6   Console.WriteLine(e.Exception.Message);
7   waitHandle.Set();
8}
;
9

 1static void workflowRuntime_Stopped(object sender, WorkflowRuntimeEventArgs e)
 2{
 3   Console.WriteLine("Workflow Runtime Is Started");
 4}

 5
 6static void workflowRuntime_Started(object sender, WorkflowRuntimeEventArgs e)
 7{
 8   Console.WriteLine("Workflow Runtime Is Stopped");
 9}

10

最后,我们再看一看下图重温一下host,workflowruntime,workflowInstance的关系
Host, WorkflowRuntime, WorkflowInstance

参考:MSDN, 《Workflow Foundation Step By Step》