Workflow 4.0 中三种方式实现workflow的触发调用
2016-02-14 16:44
323 查看
1WorkflowInvoker
使用WorkflowInvoker类中的InVoke静态方法-->WorkflowInvoker.Invoke(myWF); //myWF为自定义的workflow实例
【这种方式可以像一个函数一样顺序执行我们的工作流程,非常简单,但是在工作流执行过程中,不能与工作流实现数据的交换】
2、WorkflowApplication
调用WorkflowApplication实例的Run方法-->WorkflowApplication wfApp = new WorkflowApplication(myWF); wfApp.Run(); //myWF为自定义的workflow实例
【可以控制工作流实例长时间运行,可以在运行过程中和实例进行数据交换。但是只能执行一个的工作流实例。】
3、WorkflowServiceHost
使用WorkflowServiceHost类host起来一个服务,然后在客户端声明一个ServiceClient类的实例,用这个实例通过WCF与之前host起来的服务进行通信完成workflow的触发调用。
【WorkflowServiceHost是一个最主要的工作流主机类。可以同时管理多个工作流实例,同时控制实例的激活等操作。
支持WCF,和3.5相比有更强大的消息关联功能。当然WorkflowServiceHost也支持持久化(Persistence)和跟踪(Tracking)等功能。】
第一、二种实现方式非常简单,这里简单的用一个实例说明即可,如下所示:
第三种方法没有用到,还有待研究。。。
使用WorkflowInvoker类中的InVoke静态方法-->WorkflowInvoker.Invoke(myWF); //myWF为自定义的workflow实例
【这种方式可以像一个函数一样顺序执行我们的工作流程,非常简单,但是在工作流执行过程中,不能与工作流实现数据的交换】
2、WorkflowApplication
调用WorkflowApplication实例的Run方法-->WorkflowApplication wfApp = new WorkflowApplication(myWF); wfApp.Run(); //myWF为自定义的workflow实例
【可以控制工作流实例长时间运行,可以在运行过程中和实例进行数据交换。但是只能执行一个的工作流实例。】
3、WorkflowServiceHost
使用WorkflowServiceHost类host起来一个服务,然后在客户端声明一个ServiceClient类的实例,用这个实例通过WCF与之前host起来的服务进行通信完成workflow的触发调用。
【WorkflowServiceHost是一个最主要的工作流主机类。可以同时管理多个工作流实例,同时控制实例的激活等操作。
支持WCF,和3.5相比有更强大的消息关联功能。当然WorkflowServiceHost也支持持久化(Persistence)和跟踪(Tracking)等功能。】
第一、二种实现方式非常简单,这里简单的用一个实例说明即可,如下所示:
<span style="font-size:18px;">namespace workflow { public sealed class AddActivity : CodeActivity { AutoResetEvent instanceUnloaded = new AutoResetEvent(false); // 定义输入参数 public InArgument<int> number1 { get; set; } public InArgument<int> number2 { get; set; } //定义输出参数 public OutArgument<int> sum {get;set; } // 如果活动返回值,则从 CodeActivity<TResult> // 派生并从 Execute 方法返回该值。 protected override void Execute(CodeActivityContext context) { // 获取 Text 输入参数的运行时值 int number1 = context.GetValue(this.number1); int number2 = context.GetValue(this.number2); //更新输出参数 context.SetValue(sum, number2 + number1); } } }</span>
<span style="font-size:18px;">namespace Test { class Program { static void Main(string[] args) { AutoResetEvent instanceUnloaded = new AutoResetEvent(false); Activity activity = new AddActivity();//实例化一个流程 WorkflowApplication application = new WorkflowApplication( activity, new Dictionary<string, object>(){ {"number1", 12}, //参数名 {"number2", 12}, //参数名 }); #region 回调函数 application.Completed = (workflowApplicationCompletedEventArgs) => { Console.WriteLine("\nWorkflowApplication has Completed in the {0} state.", workflowApplicationCompletedEventArgs.CompletionState); }; application.PersistableIdle = (e) => { return PersistableIdleAction.Unload; }; application.Unloaded = (workflowApplicationEventArgs) => { instanceUnloaded.Set(); Console.WriteLine("WorkflowApplication has Unloaded\n"); }; application.OnUnhandledException = (ex) => { Console.Write("Exception"); return UnhandledExceptionAction.Terminate; }; #endregion application.Run(); //流程触发启动 //线程等待 instanceUnloaded.WaitOne(); Console.WriteLine("输出结束"); Console.Read(); } } }</span>
第三种方法没有用到,还有待研究。。。
相关文章推荐
- 应用Django构建工作流管理模块(一)
- airflow简析(一)
- 用 html5 做了三个月的工作流页面设计的效果
- 开blog的头一篇
- Spring_1.2.7 、 webwork_2.2.2及hibernate3的集成
- 深圳.NET俱乐部2007年1月活动预告
- 08月26日学习杂记(工作流)
- 09月02日学习杂记(工作流)
- 使用.net Remoting技术构建应用系统架构系列(2)
- “windows workflow foundation 新一代工作流开发实务” 读后感
- WF 从入门到精通workflow 运行时
- Icarnegie SSD4 Exercise1 Answer
- INFORMATICA 8.6安装(server)
- Workflow时server为none的问题
- 我也工作流(一)-OSWORKFLOW的介绍
- 我也工作流(二)-第一个工作流
- 我也工作流(四)-进一步描述一些概念
- Windows Workflow Foundation简介(翻译)
- 品--李刚:上善若水
- BPEL definition