DDD工作流持久化(十六)
找到对应的sql文件执行sql语句

产生如下的表:

添加引用:


添加命名空间:
using System.Activities.DurableInstancing;
using System.Runtime.DurableInstancing;
对持久化的存储进行配置:
WorkflowApplication instance;
SqlWorkflowInstanceStore instancestore; private void InstanceConfig()
{
instance = new WorkflowApplication(new ApprovalWorkflow.ApprovalWorkflow());
instancestore = new SqlWorkflowInstanceStore();
instancestore.ConnectionString = ConfigurationManager.AppSettings["constr"];
instance.InstanceStore = instancestore;
instance.Idle =
new Action<WorkflowApplicationIdleEventArgs>(workflowidle);
instance.PersistableIdle =
new Func<WorkflowApplicationIdleEventArgs, PersistableIdleAction>(workflowpersist);
instance.Completed =
new Action<WorkflowApplicationCompletedEventArgs>(workflowcompleted);
}
private PersistableIdleAction workflowpersist(WorkflowApplicationIdleEventArgs args)
{
return PersistableIdleAction.Unload;
}
执行查询语句:
SqlConnection conn = null;
SqlCommand cmd = null;
private void ResumeActivity(string bookmarkname,string cb)
{
conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.AppSettings["constr"];
conn.Open();
cmd =
new SqlCommand("select Id from [System.Activities.DurableInstancing].[InstancesTable]", conn);
var instanceid=(Guid)cmd.ExecuteScalar();
InstanceConfig();
instance.Load(instanceid);
if (instance != null)
{
if(instance.GetBookmarks().Count(p=>p.BookmarkName==bookmarkname)==1)
instance.ResumeBookmark(bookmarkname, cb);
}
}
WF的跟踪:
定义一个跟踪的参与者类:
引入命名空间:
using System.Activities.Tracking;
public class WFTrackParticipent:TrackingParticipant
{
/// <summary>
///
/// </summary>
/// <param name="record">跟踪的记录</param>
/// <param name="timeout"></param>
protected override void Track(TrackingRecord record,TimeSpan timeout)
{
WorkflowInstanceRecord workflowinstancerecord = record
as WorkflowInstanceRecord;
if(workflowinstancerecord !=null)
{
Console.WriteLine("工作流实例ID:{0},工作流状态:{1}", workflowinstancerecord.InstanceId,
workflowinstancerecord.State);
} ActivityStateRecord activitystaterecord =
record as ActivityStateRecord;
if(activitystaterecord !=null)
{
string vars = "";
foreach(var var in activitystaterecord.Variables)
{
vars = vars + "变量名:" + var.Key + " 变量值:" + var.Value;
}
Console.WriteLine("节点名:{0},节点状态:{1},变量信息:{2}",
activitystaterecord.Activity.Name, activitystaterecord.State, vars);
} }
}
定义筛选的类:
public class WFTracking
{
public static WFTrackParticipent GetTrackingInfo()
{
TrackingProfile trackingprofiler =
new TrackingProfile();
trackingprofiler.Name = "wf tracking profiler"; WorkflowInstanceQuery workflowinstancequery =
new WorkflowInstanceQuery();
workflowinstancequery.States.Add(WorkflowInstanceStates.Started);//开始的状态
workflowinstancequery.States.Add(WorkflowInstanceStates.Completed);//完成的状态
workflowinstancequery.States.Add(WorkflowInstanceStates.Persisted);
workflowinstancequery.States.Add(WorkflowInstanceStates.Resumed); ActivityStateQuery activitystatequery =
new ActivityStateQuery(); activitystatequery.ActivityName = "*";
activitystatequery.Arguments.Add("*");
activitystatequery.Variables.Add("*");
activitystatequery.States.Add(ActivityStates.Executing);
activitystatequery.States.Add(ActivityStates.Closed); trackingprofiler.Queries.Add(workflowinstancequery);
trackingprofiler.Queries.Add(activitystatequery); WFTrackParticipent wftrackparticipent =
new WFTrackParticipent();
wftrackparticipent.TrackingProfile = trackingprofiler;
return wftrackparticipent;
}
}
启动程序监听的代码:
instance.Extensions.Add(WFTracking.GetTrackingInfo());
异步线程执行代码:
public class Compute
{
AsyncCallback callback;
IAsyncResult asyncResult;
int n;
int result;
public IAsyncResult BeginmyCall(int n, AsyncCallback callback, object asyncState)
{
this.n = n;
this.callback = callback;
this.asyncResult = new myAsyncResult() { AsyncState = asyncState };
Thread thread = new Thread(new ThreadStart(myProcessThread));
thread.Start();
return asyncResult;
} public void EndmyCall(IAsyncResult r)
{ } public void myProcessThread()
{
for (int i = 1; i <= n; i++)
{
Thread.Sleep(1000);
result = result + i;
Console.WriteLine(i);
}
Console.WriteLine(result.ToString());
this.callback(this.asyncResult);
}
}
public class myAsyncResult : IAsyncResult
{
public object AsyncState
{
get; set;
} public System.Threading.WaitHandle AsyncWaitHandle
{
get; set;
} public bool CompletedSynchronously
{
get
{
return true;
}
} public bool IsCompleted
{
get
{
return true;
}
}
}
DDD工作流持久化(十六)的更多相关文章
- J2EE进阶(十六)Hibernate 中getHibernateTemplate()方法使用
J2EE进阶(十六)Hibernate 中getHibernateTemplate()方法使用 spring 中获得由spring所配置的hibernate的操作对象,然后利用此对象进行,保存,修 ...
- centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs 第十六节课
centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,cur ...
- 我的MYSQL学习心得(十六) 优化
我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- Bootstrap <基础二十六>进度条
Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet ...
- Bootstrap<基础十六> 导航元素
Bootstrap 提供的用于定义导航元素的一些选项.它们使用相同的标记和基类 .nav.Bootstrap 也提供了一个用于共享标记和状态的帮助器类.改变修饰的 class,可以在不同的样式间进行切 ...
- 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)
解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...
- JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数
第二题 已知有十六支男子足球队参加2008 北京奥运会.写一个程序,把这16 支球队随机分为4 个组.采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚 ...
- Web 前端开发人员和设计师必读精华文章【系列二十六】
<Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
随机推荐
- 2018 “百度之星”程序设计大赛 - 初赛(A)
第二题还算手稳+手快?最后勉强挤进前五百(期间看着自己从两百多掉到494名) 1001 度度熊拼三角 (hdoj 6374) 链接:http://acm.hdu.edu.cn/showprob ...
- Linux下clock计时函数学习【转】
转自:https://www.cnblogs.com/wfwenchao/p/5195022.html 平时在Linux和Winows下都有编码的时候,移植代码的时候免不了发现一些问题.1. 你到底准 ...
- 关于PJ 10.27
题1 : Orchestra 题意: 给你一个 n*m 的矩阵,其中有一些点是被标记过的. 现在让你求标记个数大于 k 个的二维区间个数. n.m .k 最大是 10 . 分析: part 1: 10 ...
- CodeForces 937C Save Energy! 水题
题意: 一个炉子烤鸡,炉子打开的时候一共$T$分钟可以烤完,关闭的时候一共$2T$分钟可以烤完,炉子每$K$分钟自动关闭,厨师每$D$分钟回来检查,打开炉子 问多长时间烤完.. 题解: 用整数写比较稳 ...
- xshell访问内网虚拟机
1 关闭虚拟机防火墙 chkconfig iptables off 2 查看VMware Network Adapter VMnet8的ip地址 3 虚拟机nat中设置端口转发,抓发至虚拟机内Linu ...
- 如何:配置 ClickOnce 信任提示行为
转载链接:https://technet.microsoft.com/zh-cn/magazine/ee308453 可以配置 ClickOnce 信任提示以控制是否允许最终用户选择安装 ClickO ...
- ELK Packetbeat 部署指南
http://www.ttlsa.com/elk/elk-packetbeat-deployment-guide/
- 路由跟踪表满,日志报错nf_conntrack: table full, dropping packet.
“连接跟踪表已满,开始丢包”!相信不少用iptables的同学都会见过这个错误信息吧,这个问题曾经也困扰过我好长一段时间.此问题的解决办法有四种(nf_conntrack 在CentOS 5 / ke ...
- 46)django-发送邮件
django已封装好了邮件发送功能,可以直接调用发送模块 1. 配置相关参数 如果用的是 阿里云的企业邮箱,则类似于下面: 在 settings.py 的最后面加上类似这些 EMAIL_BACKEND ...
- ES5与ES6的研究
今天开始ES5与ES6的研究. 1.什么是ES5与ES6? 就是ECMAScript的第五个版本与第六个版本,那么问题来了,什么是ECMAScript?首先它是一种由Ecma国际通过ECMA-262标 ...