posts - 87, comments - 715, trackbacks - 46, articles - 11
  博客园 :: 首页 ::  :: 联系 :: 订阅 订阅 :: 管理

坚持学习WF(3):WF框架概览

Posted on 2008-04-08 07:27 生鱼片 阅读(2976) 评论(14)  编辑 收藏 网摘 所属分类: WF

[置顶]坚持学习WF文章索引

觉得这篇没什么好写的,帽子比较大,说浅了吧没什么东西,说深了又写不完,而且我刚刚研究也深入不到哪去(:-))。WF是一个可扩展的框架并且从下到上、在每个级别都针对可扩展性进行了设计。WF提供一个工作流引擎、一个 .NET 托管 API、运行库服务以及与 Microsoft Visual Studio 2008 集成的可视化设计器和调试器。可使用 Windows Workflow Foundation 来生成并执行同时跨越客户端和服务器的工作流,以及可在所有类型的 .NET 应用程序内部执行的工作流。在网上找了一张比较酷的WF框架图(源自InfoQ):

from_InfoQ_runtime

下面是简单介绍下各个部分:

WF Class Libraries and Framework:

就是WF的基础类库了。

 

工作流引擎:

表示工作流运行时引擎为工作流提供的可配置执行环境,在WF中由WorkflowRuntime类来完成。每个AppDomain只能建一个WorkflowRuntime实例,因为默认情况下一个应用程序就只有一个AppDomain,如果你的应用程序创建另一个附加的AppDomain那么你可以在创建一个WorkflowRuntime的实例。WorkflowRuntime在宿主中以自已独立的线程运行例,它可以加载多个工作流实例,每个工作流实例在WorkflowRuntime有独立的线程.

 

Runtime服务:

WF提供的服务主要有两种:core service和local service,core service是微软已经给我们提供好了的,比如持久化服务,跟踪服务等,core service是实现工作和宿主程序通信的所以也叫做数据交换服务,关于如何注册和使用core service和local service以后在说吧,这的东西还不少。

 

宿主环境:

工作流说白了就是一个程序集(DLL),那必须要有宿主环境,它的宿主环境可以是任何的应用程序,比如控制台的,Windows Form,ASP.NET等,下面的插图显示了如何在一个宿主应用程序的进程中同时承载工作流、活动和工作流运行时引擎(源自MSDN)。

host

 

工作流和活动:

工作流是一组存储为模型的名为活动的基本单元,活动用于描述实际进程。 工作流提供了一种方法,用于描述多项短期运行或长期运行的工作之间的执行顺序和依赖关系。 此工作从头到尾地贯穿模型,并且活动可以人工执行或由系统功能执行。在WF中工作流实例由WorkflowInstance来表示。

 

下面是在坚持学习WF(1):从HelloWorld开始中HelloWorld程序中的代码,将工作流宿主在控制台程序中。

using(WorkflowRuntime workflowRuntime = new WorkflowRuntime()) 

               AutoResetEvent waitHandle 
= new AutoResetEvent(false); 
                workflowRuntime.WorkflowCompleted 
+= delegate(object sender, WorkflowCompletedEventArgs e)
                {waitHandle.Set();}; 
                workflowRuntime.WorkflowTerminated 
+= delegate(object sender, WorkflowTerminatedEventArgs e) 
                { 
                    Console.WriteLine(e.Exception.Message); 
                    waitHandle.Set(); 
                };                 
                WorkflowInstance instance 
= workflowRuntime.CreateWorkflow(typeof(HelloWorld.Workflow1)); 
                instance.Start(); 
                waitHandle.WaitOne(); 
                Console.WriteLine(
"Press any key to exit"); 
                Console.ReadLine();
}

这里主要说下WorkflowRuntime和WorkflowInstance的常用方法:

WorkflowRuntime

StartRuntime()方法:启动引擎。

StopRuntime()方法:停止引擎。

CreateWorkflow()方法:创建工作流实例。

它有一些与引擎状态相关的事件,比如上面代码中的WorkflowCompleted ,WorkflowTerminated 等等。

WorkflowInstance有一些对运行控制的方法Start,Abort,Resume,Terminate等等,这些都可以在MSDN找到,觉得列出来没有什么意义,它有一个InstanceId的属性是得到当前实例GUID,workflow实例使用GUID做为的统一标识。

 

最后WXWinter(冬)http://www.cnblogs.com/foundation/archive/2006/09/27/516644.html这篇文章有个很好例子,推荐大家看下,可以很好的掌握WorkflowRuntime和WorkflowInstance的用法,就这些吧。

上一篇:坚持学习WF(2):WF创作模式和设计时工具
下一篇:坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)


本blog文章如无特殊说明,均属原创,转载请注明出处。

Feedback

#1楼    回复  引用  查看    

2008-04-08 08:37 by 李战      
这个东西俺一直没搞懂,谢谢楼主提供线索。

#2楼 [楼主]   回复  引用  查看    

2008-04-08 08:41 by 生鱼片      
@李战
呵呵,我也刚学,这阵子趁工作不是很忙抓紧看啊

#3楼    回复  引用  查看    

2008-04-08 08:55 by Justin      
@李战
我跟你一样,没有专门研究过,断断续续通过大家的文章了解一些

#4楼    回复  引用  查看    

2008-04-08 09:42 by GuoYong.Che      
支持

#5楼    回复  引用  查看    

2008-04-08 09:49 by 笑煞天      
那张图果然不是一般的酷哈.

#6楼    回复  引用  查看    

2008-04-08 11:31 by works guo      
都看拉!很好!支持!

#7楼    回复  引用  查看    

2008-04-08 11:42 by Anders Cui      
@Justin
跟你差不多,呵呵

#8楼 [楼主]   回复  引用  查看    

2008-04-08 16:07 by 生鱼片      
@Justin
@GuoYong.Che
@笑煞天
@works guo
@Anders Cui
多谢支持

#9楼    回复  引用    

2008-07-22 23:13 by Dave林 [未注册用户]
我也一直跟你学习,谢谢了

#10楼    回复  引用  查看    

2008-10-14 09:52 by Jachnicky      
我在一个宿主程序中new 了两个工作流实例,为什么不是按先后顺序来执行的呢?

WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(HelloWorld.Workflow1));
instance.Start();

WorkflowInstance instance2 = workflowRuntime.CreateWorkflow(typeof(HelloWorld.Workflow2));
instance2.Start();

workflow1是打印"Hello "
workflow2是打印"world!"
在运行时有时是打印:
Hello
world!
有时却是打印:
world!
Hello.
好奇怪哦.
.

#11楼 [楼主]   回复  引用  查看    

2008-10-14 20:58 by 生鱼片      
@Jachnicky
由于工作流实例是异步执行的,你可以使用AutoResetEvent来阻塞当前线程。你还可查看工作流计划服务,他是用来管理工作流实例线程的。

#12楼    回复  引用  查看    

2008-10-22 13:11 by goyier      
@生鱼片
异步的吧

#13楼 [楼主]   回复  引用  查看    

2008-10-22 13:34 by 生鱼片      
@goyier
是的,笔误。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-06-03 20:29 编辑过
Google站内搜索
[推荐职位]上海盛大网络招聘架构师



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》


相关链接: