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 ...
随机推荐
- 超级简单的Android Studio jni 实现(无需命令行)【转载】
原文: http://www.jianshu.com/p/e689d0196a17 1.配置Anroid Studio(这步是关键) 使用[command+,] 打开Preferences,选择Ext ...
- EM算法(坐标上升算法)
原文地址:https://www.cnblogs.com/to-creat/p/6075322.html 机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊,我们一 ...
- 2018牛客暑期ACM多校训练营第二场(有坑未填)
第二场终于等来学弟 开始(被队友带飞)的开心(被虐)多校之旅 A run A题是一个递推(dp?)+前缀和 因为看数据量比较大 就直接上前缀和了 一个比较简单的递推 没有太多难点 签到题 需要注意 ...
- 判断HDFS文件是否存在
hadoop判断文件是否存在 在shell中判断一个HDFS目录/文件是否存在 直接看shell代码: hadoop fs -test -e /hdfs_dirif [ $? -ne 0 ]; the ...
- 【转】drop、truncate和delete的区别
(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删 ...
- LaTeX公式中的空格
两个quad空格 a \qquad b 两个m的宽度 quad空格 a \quad b 一个m的宽度 大空格 a\ b 1/3m宽度 中等空格 a\;b 2/7m宽度 小空格 a\,b 1/6m宽度 ...
- recv() failed (104: Connection reset by peer) while reading response header from upstream
2017年12月1日10:18:34 情景描述: 浏览器执行了一会儿, 报500错误 运行环境: nginx + php-fpm nginx日志: recv() failed (104: Conn ...
- LabVIEW 波形图表显示多条曲线
如何在波形图表中显示多条曲线呢? 首先看看波形图表的说明,请查看labVIEW 帮助 图 1 波形图表控件的即时帮助信息 关键就在绑定多个点. 图 2 利用捆绑函数将多个信号捆绑成簇 图 3 ...
- datatables:如何禁用一列的排序
第一列是checkbox列,不需要排序,所以需要禁用掉. 代码如下: var table = $('#example1').DataTable( { 'paging' : true, 'lengthC ...
- oracle数据库内存调整之增加内存
注:本文来源:小颜Kevin <oracle数据库内存调整之增加内存> 模拟操作系统内存从2G增加为8G后,调整数据库内存参数,示例中参数不作为实际生产环境参考,因为因需所取,调整参数 ...