WF工作流持久化

VS2017里安装时没有选SQLServer express?那就下载一个

下载Sql Server 2016 Express LocalDB,下载地址在这里 是英文版的  

https://download.microsoft.com/download/9/0/7/907AD35F-9F9C-43A5-9789-52470555DB90/ENU/SqlLocalDB.msi

然后执行

image.png

然后执行

image.png

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]

image.png

本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864