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 ...
随机推荐
- Gradle的使用
⒈下载 点击此处 ⒉安装 1.解压 2.添加环境变量GRADLE_HOME 指向解压缩文件的磁盘地址 3.PATH环境变量添加%GRADLE_HOME%\bin ⒊使用阿里云仓库 repositori ...
- Effective C++ 笔记
无参构造函数如何暴躁的构造. 先来看看标准的raw_memory : *sizeof(int)); // create int raw memory int *intVars = static_cas ...
- V4L2 API详解 <二> Camera详细设置【转】
转自:http://blog.sina.com.cn/s/blog_602f87700101bf36.html 作者: Sam (甄峰) sam_code@hotmail.com Camera的 ...
- 看完此文还不懂NB-IoT,你就过来掐死我吧...
看完此文还不懂NB-IoT,你就过来掐死我吧....... 1 1G-2G-3G-4G-5G 不解释,看图,看看NB-IoT在哪里? 2 NB-IoT标准化历程 3GPP NB-IoT的标准化始于20 ...
- HTML5实现全屏
现在主流的浏览器都支持全屏,但是各家实现不一.下面是主流浏览器实现方法: // W3C 提议 element.requestFullscreen(); element.exitFullscreen() ...
- mysql线上数据库单表超过200G的处理
tbl_user_data占用了大量磁盘空间,数据表占用大概200G,索引30G左右,查询非常慢,影响业务的支持进行现在需要对它进行清理 临时解决方案是将原表重命名,新建一个和这个表相同的空表来替换( ...
- OpenStack实践系列⑤网络服务Neutron
OpenStack实践系列⑤网络服务Neutron 3.8 Neturn 服务部署 注册neutron服务 [root@node1 ~]# source admin-openrc.sh [root@n ...
- Ex 2_34 线性3SAT..._第四次作业
- vue.js插槽
具体讲解的url https://github.com/cunzaizhuyi/vue-slot-demo //例子 用jsfiddle.net去运行就好 <!DOCTYPE html> ...
- Appium新版本不再支持ByName定位了怎么办
appium版本在1.5以后就不再支持ByName的定位,本文章仅介绍在appium1.6.3/1.6.4/1.6.5版本下如何支持ByName定位,适用于安卓.在使用appium1.5之后的版本时, ...