VS2017里安装时没有选SQLServer express?那就下载一个
下载Sql Server 2016 Express LocalDB,下载地址在这里 是英文版的
https://download.microsoft.com/download/9/0/7/907AD35F-9F9C-43A5-9789-52470555DB90/ENU/SqlLocalDB.msi
然后执行
然后执行
testActivity.cs
using System; using System.Activities; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApp4 { /// <summary> /// 输入两个整数,输出这两个整数之和 /// </summary> public sealed class TestActivity : CodeActivity { // 定义一个整数类型的活动输入参数 public InArgument<int> number1 { get; set; } public InArgument<int> number2 { get; set; } //定义一个整数类型的活动输出参数 public OutArgument<int> outNumber { get; set; } // 如果活动返回值,则从 CodeActivity<TResult> // 派生并从 Execute 方法返回该值。 protected override void Execute(CodeActivityContext context) { // 获取 Text 输入参数的运行时值 int num1 = context.GetValue(this.number1); int num2 = context.GetValue(this.number2); context.SetValue(outNumber, num1 + num2); } } }
Button:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Activities; using System.Activities.DurableInstancing; using System.Runtime.DurableInstancing; namespace WindowsFormsApp4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //SqlWorkflowInstanceStore类派生自持久性功能的抽象 System.Runtime.Persistence.InstanceStore 类,并提供实现以允许将实例状态信息保存到SQL Server 2005 或 SQL Server 2008 数据库,或从该数据库中加载实例状态信息。 //1.流程数据库持久化对象准备 //Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Administrator\Documents\(localdb).mdf;Integrated Security=True;Connect Timeout=30 SqlWorkflowInstanceStore instanceStore = new SqlWorkflowInstanceStore(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Administrator\Documents\(localdb).mdf;Integrated Security=True;Connect Timeout=30"); //2.Execute是异步持久化到数据库第一个参数是实例句柄,第二个参数是需要执行的命令,第三个参数是持久化数据库超时时间返回值为InstanceView视图,包括持久化的数据的实例数据(摘自MSDN) InstanceView view = instanceStore.Execute(instanceStore.CreateInstanceHandle(), new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(10)); //3.设置实例的默认所有者,SqlWorkflowInstanceStore默认只使用单一的WorkflowApplication.当使用多个工作流的时候会发生一个异常,SqlWorkflowInstanceStore does not support creating more than one lock owner concurrently. Consider setting InstanceStore.DefaultInstanceOwner to share the store among many applications.当设置这个属性的时候不会有这个问题了。如果确认只有一个工作流时也必须把DefaultInstanceOwner设置为Null,否则垃圾回收器可能不会回收这块内存。(MSND说的是可能) instanceStore.DefaultInstanceOwner = view.InstanceOwner; //4.1实例化一个活动 Activity activity = new TestActivity(); //4.2创建流程实例并传入参数 WorkflowApplication application = new WorkflowApplication(activity); //5.关联流程对象到数据库(countersignatureDB中的InstancesTable表) application.InstanceStore = instanceStore; //6.把流程实例保存到数据库中 application.Persist(); //流程ID显示到文本框。 txtID.Text = application.Id.ToString(); } } }
[System.Activities.DurableInstancing].[InstancesTable]
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


