1.找到%WINDIR%Microsoft.NETFrameworkv4.xxxSQLEN 中的脚本。
2.在数据库中先执行1中找到的SqlWorkflowInstanceStoreSchema.sql 文件,然后运行 SqlWorkflowInstanceStoreLogic.sql 文件。创建持久性数据库。
3.程序集添加 System.Activites.DurableInstancing.dll 及System.Runtime.DurableInstancing.dll的引用
4.构造一个 SqlWorkflowInstanceStore,并将其分配给 WorkflowApplication 的InstanceStore。
(第8行--29行的是工作流常用设置 可以不用写)
1 WorkflowApplication wfApp = new WorkflowApplication(new WFDemoActivity()); 2 3 // 处于空闲状态时 保留之前状态并卸载工作流 4 wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e2) 5 { 6 return PersistableIdleAction.Unload; 7 }; 8 ////发生异常时 结束工作流 9 //wfApp.OnUnhandledException += a => 10 //{ 11 // Console.WriteLine("工作流异常"); 12 // //结束工作流 13 // return UnhandledExceptionAction.Terminate; 14 //}; 15 ////工作流被卸载时调用的动作 16 //wfApp.Unloaded += a => 17 //{ 18 // Console.WriteLine("工作流已被卸载"); 19 //}; 20 ////空闲状态调用的动作 21 //wfApp.Idle += a => 22 //{ 23 // Console.WriteLine("工作流停下来了..."); 24 //}; 25 ////终止工作流时调用的动作 26 //wfApp.Aborted += a => 27 //{ 28 // Console.WriteLine("工作流已被终止"); 29 //}; 30 //可以保存状态信息的抽象类 31 System.Activities.DurableInstancing.SqlWorkflowInstanceStore store = 32 new SqlWorkflowInstanceStore("Server=.;uid=sa;pwd=*****;database=DATABASEName"); 33 //提供当前实例访问状态 (设置为可以保存状态) 34 wfApp.InstanceStore = store; 35 //WorkflowInvoker.Invoke(new WFDemoActivity()); 36 wfApp.Run(); 37 //将wf自动分配的id记录下来 38 this.txtWFID.Text = wfApp.Id.ToString(); 39 //复制到粘贴板 40 Clipboard.SetText(this.txtWFID.Text);
5.调用继续工作流的方法
1 //从数据库中加载当前工作流实例的状态。text为上文的wfapp的自动分配的id 2 wfApp.Load(Guid.Parse(this.txtWFID.Text));