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 ...
随机推荐
- golang goroutine 介绍
Goroutine 是用户态自己实现的线程,调度方式遇到IO/阻塞点方式就会让出cpu时间(其实也看编译器的实现,如果TA在代码里面插入一些yield,也是可以的. 反正现在不是抢占式的.) 不能设置 ...
- Go语言程序开发初涉
由于工作原因,现在开始学习Go语言.这也是本人第一篇关于Go的博客.本文将通过一些基本概念的说明和实际案例,使得大家能快速对Go程序的开发有个了解. 一. Go的安装 : 在 https:// ...
- NUMA的取舍与优化设置【转】
NUMA的取舍与优化设置 在os层numa关闭时,打开bios层的numa会影响性能,QPS会下降15-30%; 在bios层面numa关闭时,无论os层面的numa是否打开,都不会影响性能. 安装n ...
- python模块之sniffio
嗅探python用了哪个异步库 from sniffio import current_async_library import trio import asyncio async def print ...
- MongoDB 的 upsert
MongoDB 的update 方法的三个参数是upsert,这个参数是个布尔类型,默认是false.当它为true的时候,update方法会首先查找与第一个参数匹配的记录,在用第二个参数更新之,如果 ...
- 打印机wifi
给人修理了半天共享打印机问题,连接不上,被共享机为32位xp系统,共享机为64位win7系统,共享时无法安装驱动,最后知道打印机具备连接wifi功能,然后用官网驱动连接打印机即可.out了,现在打印机 ...
- modsign: could't get uefi db list
手头上一个工控机,装完 ubuntu 16.04后重启, 一直提示如下错误: modsign: could't get uefi db list 用过ubuntu的修复工具也没有成功. 后经过如下操 ...
- 将C注册到lua环境中使用
注册到lua的方式有两种,一种是lua解释器,如果支持动态链接,使用动态链接机制,将函数接口编译成动态链接库,然后将动态链接库放到lua的C路径(LUA_CPATH)中,然后在lua文件中直接使用 r ...
- ansible笔记(6):常用模块之命令类模块
ansible笔记():常用模块之命令类模块 command模块 command模块可以帮助我们在远程主机上执行命令 注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处 ...
- Appium新版本不再支持ByName定位了怎么办
appium版本在1.5以后就不再支持ByName的定位,本文章仅介绍在appium1.6.3/1.6.4/1.6.5版本下如何支持ByName定位,适用于安卓.在使用appium1.5之后的版本时, ...