详解Visual Studio 2010中WF 4.0的应用

开发 后端
在这里我们将讨论的是Visual Studio 2010中Windows Workflow 4.0的应用,希望对大家有所帮助。

本文将为大家介绍的Windows Workflow 4.0在Visual Studio 2010中的相关应用,希望简短的文章能为大家搞好Workflow 4.0开发有所帮助。

#T#

最近在虚拟机中安装了Visual Studio 2010。界面是WPF的,CPU和内存占用不是很夸张,打开一个很简单的附带的Lab Project, CPU使用率一般在20%一下,内存使用不到800M。

言归正传,还是来介绍Windows Workflow 4.0。

与3.5相比工作流模型有了很大改变和不同。

我们知道3.5中工作流都是托管在WorkflowRuntime中的,通过WorkflowRuntime来创建、执行工作流实例;在4.0中没有WorkflowRuntime类,可以方便的直接创建WorkflowInstance实例和执行工作流。Lab中代码如下:

WorkflowInstance myInstance = new WorkflowInstance(new SayHello(),  
                 new SayHelloInArgs(userName));  
             myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e)  
             {  
                 Console.WriteLine("*** OnCompleted delegate is running on thread {0} ***",  
                     Thread.CurrentThread.ManagedThreadId);  
                 SayHelloOutArgs outArgs = new SayHelloOutArgs(e.Outputs);  
                 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(); 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

4.0中有一个WorkflowInvoker类,这个类也可以执行工作流,只不过这个类是用来测试工作流的,这很大的改进了前一版本中工作流难以测试的问题。

[TestMethod]  
       public void ShouldReturnGreetingWithName()  
       {  
           Dictionary<stringobject> input = new Dictionary<stringobject>()  
           {  
               {"UserName""Test"}  
           };  
           IDictionary<stringobject> output;  
           output = WorkflowInvoker.Invoke(new SayHello(), input);  
           Assert.AreEqual("Hello, Test from Workflow 4", output["Greeting"]);  
       } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

3.5中Activity是所有活动的基类,要实现自定义活动,只需重写Activity 的Execute()方法;在4.0中所有的活动都是从抽象类WorkflowElement派生出来的,而且Visual Studio中默认自定义活动都是从CodeActivity或CodeActivity<T>继承的,相似的是也需要重写Execute()方法,从而实现自定义执行逻辑。

public class MyActivity1 : CodeActivity  
  {  
      protected override void Execute(CodeActivityContext context)  
      {  
          //你的实现代码  
      }  
  } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

当然,你还是可以从Activity派生自定义活动,不过与3.5有很大不同。

public class SayHelloInCode : Activity  
   {  
       protected override WorkflowElement CreateBody()  
       {  
           return new Sequence()  
           {  
               Activities =  
               {  
                   new WriteLine()  
                   {  
                       Text = "Hello Workflow 4 in code" 
                   }  
               }  
           };  
       }  
   } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

4.0中新增加的工作流服务功能,可以直接把工作流发布为WCF服务,当然工作流也必须设计为具有WCF应答功能才行。4.0提供4个与WCF相关的活动:Receive、ReceiveReply、Send、SendReply,通过这些活动可以可视化定义WCF的服务操作。

4.0中实现了工作流设计器的基本模型,可以很容易的实现自定义设计器。

责任编辑:彭凡 来源: 百度空间
相关推荐

2010-02-05 09:06:17

Visual Stud

2009-11-24 09:00:02

Visual Stud

2010-04-01 15:10:06

Visual Stud

2010-02-23 09:02:00

Visual Stud

2010-12-16 10:00:20

QtVisual Stud

2010-03-19 16:43:37

Visual Stud

2010-02-01 09:19:32

WF 4.0

2009-11-18 09:14:49

Visual Stud

2010-01-22 09:51:31

Visual Stud

2009-12-02 09:43:38

Visual Stud

2009-07-02 10:07:24

C# 4.0的动态类型Visual Stud

2010-11-16 09:23:13

敏捷开发Visual Stud

2010-07-29 09:41:23

Visual Stud

2010-07-27 09:40:01

敏捷Visual Stud

2010-03-11 14:37:47

Visual StudScrum

2009-09-03 09:10:24

Visual Stud

2010-04-01 14:51:52

Visual Stud

2009-12-15 09:36:32

Visual Stud

2010-07-15 08:50:09

SharePointVisual Stud

2010-03-19 13:17:26

Parallel
点赞
收藏

51CTO技术栈公众号