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 ...
随机推荐
- nginx使用https协议
效果: nginx添加ssl模块 ./configure --with-http_ssl_module 生成证书 openssl genrsa -out ca.key 2048 openssl req ...
- C#如何操作XML文件
⒈XML? XML是一种可扩展的标记语言 具有以下特点 1.严格区分大小写 2.标签成对出现 3.有且只有一个根节点 ⒉XML的创建 <?xml version="1.0" ...
- 全面接触PDF:最好用的PDF软件汇总(转)
全面接触PDF:最好用的PDF软件汇总(2010-12-07更新): http://xbeta.info/pdf-software.htm 比较全面的c#帮助类,各种功能性代码: https://gi ...
- MySQL用source命令导入不记入binlog中【原创】
试验环境,MySQL主主复制 主库10.72.16.112 从库10.72.16.50 一直有个疑问,利用sql_log_bin=0可以临时在客户端停止将操作记入binlog中,如果使用source命 ...
- python父类调用子类了解一下
class B(): def __init__(self): pass def start(self): print(self.parse()) class A(B): def __init__(se ...
- python3+selenium框架设计06-编写POM测试用例
之前我们已经把测试基类,配置文件操作,浏览器引擎类封装完成.接下来使用POM的设计思路来创建我们的测试用例.接下来看一个实例,先在项目下新建pageobject文件夹.这个文件夹下放所有要测试的页面类 ...
- 使用第三方组件(django-redis)创建连接池
settings里面: ##redis配置CACHES={ 'default':{ 'BACKEND':'django_redis.cache.RedisCache', 'LOCATION':'red ...
- JavaScript 加解密库(crypto-js)
1. 概述 1.1 说明 crypto-js(GitHub)是谷歌开发的一个纯JavaScript的加密算法类库,可以非常方便的在前端进行其所支持的加解密操作.目前crypto-js已支持的算法有:M ...
- 30)django-ORM(元信息,级联删除,正反向操作,连表查询优化)
一:元信息 class User(models.Model): name=models.CharField(max_length,index=True) email=model.CharField(m ...
- 计算机中K到底是1000还是1024?
1000和1024的争论,其实是传输领域和存储领域概念不清引起的;在传输领域,1秒钟传输多少字位(即b,bit),肯定是用10进制表示,所以是1kb=1000b,即1秒钟传输1000个比特位;就好像: ...