`

WF4.0 Beta1之旅(1):基本介绍

阅读更多

微软发布了Visual Studio 2010 beta1,经过几番周折终于体验上了,不过微软beta版的产品的稳定性也太差了。不发牢骚了,现在4.0的学习资料还是很有限的,Training Kit是比较好的了,推荐大家都看看。我也将学习的过程总结下,下面就开始WF的学习吧。

一:WF4.0 有什么?

WF4.0在beta1就已经看到了比较明显的变化了。

工作流活动模型:WF4.0 beta1中活动模型有了明显的变化,新增WorkflowElement类代替了原来的SequentialWorkflowActivity和StatemachineWorkflowActivity提供了基本的抽象行为。是所有活动的基类。如下图:

clip_image002

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表达式并且支持智能感知,如下图:

clip_image002[5]

然后我们运行程序控制台就会输出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四个值。如下图:

clip_image002[7]

然后我们来设置Greeting 输出参数的返回值,我们使用WF本身提供的Assign活动来实现,我们拖一个该活动,然后将To设置为Greeting,设置Value为“Hello World”+UserName,如下图:

clip_image002[9]

在这里插一下,在工作流设计器中你双击任意一个活动,设计器会"drill into"该活动,左上角有导航如下图:

clip_image002[11]

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"]);
}
好了这次就简单到这里吧!

分享到:
评论

相关推荐

    WF4.0 Beta1之旅(3):全新的FlowChart源码

    在这个“WF4.0 Beta1之旅(3)”中,我们将聚焦于FlowChart工作流模型的源码分析,这为我们提供了更深入理解WF4.0的工作方式和设计思想的机会。 FlowChart工作流模型是一种图形化的编程模型,它通过节点(如决策、...

    wf4.0入门系列(五)

    总之,"WF4.0入门系列(五)"的学习将涵盖WF4.0的基本原理和实践技巧,通过"HelloWorkflow"实例,你可以亲手体验创建和运行工作流的过程,进一步巩固理论知识。对于希望在业务流程自动化领域有所建树的开发者来说,...

    WF4.0经典实例代码

    WF4.0,全称为Windows Workflow Foundation 4.0,是微软.NET Framework 4.0中的一个组件,用于构建业务流程应用。WF4.0引入了许多改进和新特性,使得开发人员可以更轻松地设计、实现和管理复杂的业务流程。在这个...

    WF4.0网络教程(含示例代码)

    WF4.0,全称Windows Workflow Foundation 4.0,是微软.NET Framework 4.0中的一个关键组件,用于构建业务流程和工作流应用程序。这个网络教程包含了丰富的资源和示例代码,旨在帮助开发者深入理解和掌握WF4.0的核心...

    WF 4.0 and Activity Designer tidbits

    活动是WF 4.0的基本构建块,它们可以代表单个任务或者更复杂的工作流逻辑。开发者可以使用内置的活动库,也可以自定义自己的活动来满足特定需求。 CanvasActivity是WF 4.0中一种特殊的自定义活动,它提供了一个可...

    ASP.net+WF4.0数据持久化请假系统Demo

    ASP.NET + WF4.0(Windows Workflow Foundation 4.0)数据持久化请假系统Demo是一个综合性的项目,展示了如何在Web应用中结合WF4.0技术处理业务流程,特别是请假申请这一具体场景。这个系统利用了ASP.NET作为前端...

    WF4.0基础篇学习笔记.docx

    在本学习笔记中,我们将探讨WF4.0的基础知识,包括如何开始使用WF4.0、活动(Activity)的介绍以及`WriteLine`活动的使用。 首先,创建一个WF4.0的工作流控制台应用程序涉及两个关键部分:XAML文件和宿主程序。XAML...

    WF4.0 实战(二十一):Windows Server AppFabric中宿主WF4.0应用程序.doc

    本实战将介绍如何将一个基于WF4.0的Pizza订购系统宿主到Windows Server AppFabric中,以实现应用程序的高效运行和管理。 首先,我们来看一下Pizza订购系统的架构。系统由两部分组成:一个是ASP.NET应用程序,负责...

    WF4.0 流程设计器源码例子 (提供状态机模板)

    1. **WF4.0基础知识**:了解WF4.0的核心概念,如活动、工作流实例、触发器、变量和数据绑定。 2. **状态机工作流**:掌握状态机工作流的结构和设计原则,包括初始状态、最终状态、状态转换和事件触发。 3. **...

    WF 4.0 入门经典

    1. **活动(Activity)**:这是WF 4.0的基本构建块,表示工作流中的一个操作或任务。可以是内置的简单动作,如赋值、条件判断,也可以是自定义的复杂逻辑。 2. **工作流(Workflow)**:由一系列活动组成,描述了...

    Beginning+WF4.0应用到 asp.net源码实例

    wf4.0应用asp.net 这个示例将包括WF4.0的大部分知识点。包括: 1、持久化服务 2、跟踪服务 3、自定义扩展 4、WCF Workflow Service 5、WorkflowServiceHost 6、使用Interop活动去调用WF3.0工作流程

    Microsoft .NET Framework 4.0 Beta 1

    .NET Framework 4.0 Beta 1是微软发布的一个重要的软件开发平台,用于构建、运行基于Windows操作系统的应用程序。这个版本的.NET Framework引入了许多新特性和改进,旨在提高开发者的工作效率和应用程序的性能。以下...

    [Pro.ENGINEER.Wildfire.4.0多国语言正式版].ProE_WF4.0_crack.rar

    [Pro.ENGINEER.Wildfire.4.0多国语言正式版].ProE_WF4.0_crack.rar

    wf4.0入门系列(六)

    这个例子可以帮助初学者理解如何在WF4.0中创建基本的流程。通过这个案例,你可以学习到如何创建一个简单的顺序流程,以及如何在工作流中添加输出语句等活动。 总之,WF4.0提供了一种强大的方式来建模和执行业务流程...

    [WF系列] WF 4.0 经典实例 (英文版)

    [Packt Publishing] WF 4.0 经典实例 (英文版) [Packt Publishing] Microsoft Windows Workflow Foundation 4.0 Cookbook (E-Book) ☆ 出版信息:☆ [作者信息] Andrew Zhu [出版机构] Packt Publishing [出版...

    WorkFlow流程设计源码(wf4.0)

    1. **基础活动示例**:可能包括各种基本的WF4.0活动,如顺序流、选择分支、循环等,帮助开发者理解如何使用这些基础元素构建工作流。 2. **自定义活动示例**:可能展示了如何创建和使用自定义活动,这些活动可能...

    WF4.0工作流设计器

    这个框架或解决方案可能扩展了WF4.0的基本功能,提供了更高级的业务流程管理特性,例如流程审计、版本控制、监控和报告等。 总的来说,WF4.0工作流设计器结合.NET Framework的其他组件,如WPF和C#,为开发人员提供...

    简单的WF4.0工作流设计器

    1. **WF4.0基本概念**:理解活动(Activity)、工作流(Workflow)、执行宿主(Host)等核心概念。活动是工作流的基本构建块,它们组合起来形成复杂的工作流程。 2. **WPF(Windows Presentation Foundation)**:...

Global site tag (gtag.js) - Google Analytics