微软发布了Visual Studio 2010 beta1,经过几番周折终于体验上了,不过微软beta版的产品的稳定性也太差了。不发牢骚了,现在4.0的学习资料还是很有限的,Training Kit是比较好的了,推荐大家都看看。我也将学习的过程总结下,下面就开始WF的学习吧。
一:WF4.0 有什么?
WF4.0在beta1就已经看到了比较明显的变化了。
工作流活动模型:WF4.0 beta1中活动模型有了明显的变化,新增WorkflowElement类代替了原来的SequentialWorkflowActivity和StatemachineWorkflowActivity提供了基本的抽象行为。是所有活动的基类。如下图:
CodeActivity,NativeActivity活动提供基本逻辑,我们的自定义活动可以从这几个类来继承,当然也可以直接继承自WorkflowElement类,这些以后深入细说。
内置标准活动:WF4.0 beta1中已经提供很多内置的标准活动,其中FlowChart 活动是最有趣的新增活动之一,它在 Sequential 和 StateMachine 流控制模型之间提供了一个不错的折中方案。FlowChart 允许您使用一种分步方法,它可以实现一些简单的决策和转换功能,但它也允许在工作流中返回先前的活动。对许多用户而言,流程图通常看起来更为直观。除此之外 还引入了一些新的运行时活动,可用于调用 CLR 方法 (MethodInvoke)、用于向工作流变量赋值 (Assign) 以及显式持久保持正在运行的工作流实例 (Persist)等。
持久化与跟踪的增强:可以使用Persist活动来完成工作流状态数据的持久化。以及跟踪服务的改进。
WF设计器的方便的扩展:新版的WF设计器是基于WPF的,提供了方便的扩展模型。
XAML工作流以及与WCF的整合。
二:创建工作流
1.首先我们来看下在WF4.0 beta1中如何创建工作流,我们创建一个Sequence的Workflow项目,我们可以发现工作流完全用XAML来描述。我们向工作流拖入一个WriteLine活动,该活动的功能就是向控制台输出一些信息,我们只需要设置他的Text属性即可,Text为Expression表达式并且支持智能感知,如下图:
然后我们运行程序控制台就会输出Hello World Cary了
2.上面是XAML的工作流,下面我们完全使用C#代码来构建相同的工作流,程序如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Activities; using System.Activities.Statements; namespace WorkflowConsoleApplication2 { public class HelloWorldCary : Activity { protected override WorkflowElement CreateBody() { return new Sequence() { Activities = { new WriteLine() { Text="Hello Workflow Cary in code" } } }; } } }
3.下面是宿主程序,我们可以发现WF4.0 beta1中已经没有WorkflowRuntime了,代码如下:
class Program { static void Main(string[] args) { AutoResetEvent syncEvent = new AutoResetEvent(false); WorkflowInstance myInstance = new WorkflowInstance(new Sequence1()); myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e) { syncEvent.Set(); }; myInstance.OnUnhandledException = delegate(WorkflowUnhandledExceptionEventArgs e) { Console.WriteLine(e.UnhandledException.ToString()); return UnhandledExceptionAction.Terminate; }; myInstance.OnAborted = delegate(WorkflowAbortedEventArgs e) { Console.WriteLine(e.Reason); syncEvent.Set(); }; myInstance.Run(); syncEvent.WaitOne(); } }
三:工作流输入和输出参数
1.WF4.0beta1中活动使用如下模型存储和共享数据:
变量(Variables):在活动内存储数据.
参数(Arguments):负责活动内数据的输出和输入.
表达式(Expression):在活动内部处理数据逻辑.
现在活动之间不再使用依赖项属性的绑定来传递数据,而是使用变量和参数,我们给工作流添加两个参数UserName和Greeting。一个是传入参数,一个是传出参数。
参数中有一个很重要的属性Direction,有In,Out,In/Out,Propery四个值。如下图:
然后我们来设置Greeting 输出参数的返回值,我们使用WF本身提供的Assign活动来实现,我们拖一个该活动,然后将To设置为Greeting,设置Value为“Hello World”+UserName,如下图:
在这里插一下,在工作流设计器中你双击任意一个活动,设计器会"drill into"该活动,左上角有导航如下图:
2.下面是宿主程序,在宿主程序中我们使用WorkflowInstance的一个重载传入输入参数,在OnCompleted中得到工作流的输出参数。
static void Main(string[] args) { AutoResetEvent syncEvent = new AutoResetEvent(false); Console.WriteLine("Main() is running on thread{0}",Thread.CurrentThread.ManagedThreadId); Console.Write("Enter you name:"); string userName = Console.ReadLine(); string greeting = null; Dictionary<string, object> input = new Dictionary<string, object>(); input.Add("UserName", userName); WorkflowInstance myInstance = new WorkflowInstance(new WorkflowConsoleApplication2.Sequence1(),input); myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e) { Console.WriteLine("OnCompleted is running on thread{0}",Thread.CurrentThread.ManagedThreadId); greeting = e.Outputs["Greeting"].ToString(); greeting = outArgs.Greeting; syncEvent.Set(); }; myInstance.OnUnhandledException = delegate(WorkflowUnhandledExceptionEventArgs e) { Console.WriteLine(e.UnhandledException.ToString()); return UnhandledExceptionAction.Terminate; }; myInstance.OnAborted = delegate(WorkflowAbortedEventArgs e) { Console.WriteLine(e.Reason); syncEvent.Set(); }; myInstance.Run(); syncEvent.WaitOne(); Console.WriteLine(greeting); }
四:可测试性
1.微软最近发布的ASP.NET MVC中很大程度是给开发者提供了强大的单元测试的支持,WF4.0 Beta1也对单元测试提供了增强。新增了WorkflowInvoker类来调用工作流,增加WF的可测试。下面是对上面程序的测试代码:
[TestMethod] public void TestHelloWorld() { Dictionary<string, object> input = new Dictionary<string, object>() { {"UserName","Cary"} }; IDictionary<string, object> output; output = WorkflowInvoker.Invoke(new WorkflowConsoleApplication2.Sequence1(), input); Assert.AreEqual("Hello Workflow,Cary", output["Greeting"]); }
好了这次就简单到这里吧!
发表评论
-
平淡的2007
2007-12-24 08:04 785早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1383今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 850[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 600[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 738[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1103[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 882当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 807Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 810在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 662我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1139MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 669本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 775本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 719WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1025由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 764[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 660[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 695[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1072一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 910首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
WF4.0 Beta1之旅(3):全新的FlowChart源码
WF4.0 实战(二十):Windows Server AppFabric介绍
WF4.0经典实例代码,WF4.0经典实例代码WF4.0经典实例代码
WF4.0 实战(二十一):Windows Server AppFabric中宿主WF4.0应用程序
wf4.0应用asp.net 这个示例将包括WF4.0的大部分知识点。包括: 1、持久化服务 2、跟踪服务 3、自定义扩展 4、WCF Workflow Service 5、WorkflowServiceHost 6、使用Interop活动去调用WF3.0工作流程
[Packt Publishing] WF 4.0 经典实例 (英文版) [Packt Publishing] Microsoft Windows Workflow Foundation 4.0 Cookbook (E-Book) ☆ 出版信息:☆ [作者信息] Andrew Zhu [出版机构] Packt Publishing [出版...
WF 4.0 and Activity Designer tidbits,Custom CanvasActivity
该资源需要安装sql server 2008,运用WF4.0的新特性实现了一个简单的请假系统,并实现了WF4.0的数据持久化
WF4.0利用书签实现动态调用子流程的例子
WF4.0基础篇学习笔记,很好的资料文档,下载不后悔
从网络上收集的微软WF4.0的相关资料,及例子代码,方便大家学习,参考,并向原创作者们致敬
[Apress] WF 4.0 入门经典 (英文版) [Apress] Beginning WF Windows Workflow in .NET 4.0 (E-Book) ☆ 出版信息:☆ [作者信息] Mark Collins [出版机构] Apress [出版日期] 2010年03月19日 [图书页数] 500页...
VS2012 c#
非常好的WF 4的入门书,介绍了从简单建立WF,到使用其高级功能,入扩展、跟踪等
WF4.0 流程设计器源码例子 (提供状态机模板)
基础版的流程学习教程 适合初学者 流程相关的东西 从WinFX到NET3.x再到NET4.0 ,WPF,WCF,WF 始终是放在...原文网址:file:///F:/接收文件/培训相关/WF4.0/WF4.0/基础篇/WF4_0 基础篇 (一)开始使用WF_雨枫技术教程网.mht
如果WF不能持久化,那么流程就需要一次就执行完毕,所有的操作就要一次走下去,如果不能持久化,那么在流程中需要处理的公共数据,可能为简单类型,也可能为复杂类型)则完全不同,甚至说每个人都是不一样的,我们要...
WF4.0工作流设计器,C/S结构,可实现无代码设计工作流
最权威的Beginning WF 4.0翻译,详细的讲解,一步一步教你掌握工作流,绝对分有所值。
The Workflow Foundation included in .Net 4.0 (referred to as WF 4.0) represents a whole new paradigm for building workflow-based applications. It has been completely reengineered from the ground up. ...