详解Visual Studio 2010中WF 4.0的应用
创始人
2024-06-20 18:51:27
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中代码如下:

  1. WorkflowInstance myInstance = new WorkflowInstance(new SayHello(),  
  2.                  new SayHelloInArgs(userName));  
  3.              myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e)  
  4.              {  
  5.                  Console.WriteLine("*** OnCompleted delegate is running on thread {0} ***",  
  6.                      Thread.CurrentThread.ManagedThreadId);  
  7.                  SayHelloOutArgs outArgs = new SayHelloOutArgs(e.Outputs);  
  8.                  greeting = outArgs.Greeting;  
  9.                  syncEvent.Set();  
  10.              };  
  11.              myInstance.OnUnhandledException = delegate(WorkflowUnhandledExceptionEventArgs e)  
  12.              {  
  13.                  Console.WriteLine(e.UnhandledException.ToString());  
  14.                  return UnhandledExceptionAction.Terminate;  
  15.              };  
  16.              myInstance.OnAborted = delegate(WorkflowAbortedEventArgs e)  
  17.              {  
  18.                  Console.WriteLine(e.Reason);  
  19.                  syncEvent.Set();  
  20.              };  
  21.              myInstance.Run(); 

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

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

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

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

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

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

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

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

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...