.net WCF WF4.5 状态机、书签与持久化
想看源码请直接翻到最后,使用方式如下图

如果同时需要多个书签可以直接在需要的位置创建书签,会认为是同一个实例。
若需要实现的效果是同时需要好几个部门审核,那么只要在对应的位置同时创建多个书签即可。
编写书签代码活动
注意几个地方,创建书签需要继承NativeActivity,随之要修改的就是Execute的参数类型
如下所有注释部分
public sealed class BookmarkActivity : NativeActivity
{
// 定义一个字符串类型的活动输入参数
public InArgument<string> Text { get; set; }
public OutArgument<string> bookMark{get;set;} // 如果活动返回值,则从 CodeActivity<TResult>
// 并从 Execute 方法返回该值。 //2.修改上下文类型
protected override void Execute(NativeActivityContext context)
{
// 获取 Text 输入参数的运行时值
string text = context.GetValue(this.Text); //3.创建书签并设置书签恢复会的回调函数
context.CreateBookmark("name", new BookmarkCallback(final));
}
//4.重写CanInduceIdle
protected override bool CanInduceIdle
{
get
{
return true;
}
}
//5.通过恢复书签时自动调用此函数来将书签传递给外部变量
protected void final(NativeActivityContext context,Bookmark bookmark,object obj)
{
Dictionary<string, object> o = (Dictionary<string, object>)obj;
context.SetValue(bookMark, context.ActivityInstanceId);
}
1.使用WorkflowApplication启动活动
//与主线程同步
AutoResetEvent syncEvent = new AutoResetEvent(false); var act = new Activity1();
Dictionary<string, object> dictionary = new Dictionary<string, object>();
dictionary.Add("pic","");
WorkflowApplication app = new WorkflowApplication(act, dictionary);
//运行活动
app.Run();
//等待信号
syncEvent.WaitOne();
2.持久化的sql路径
C:\Windows\Microsoft.NET\Framework\v4.0.30319\SQL\en

3.添加程序集

3.添加引用
using System.Activities.DurableInstancing;
4.在合适位置绑定数据持久化使用的数据库
SqlWorkflowInstanceStore store =
new SqlWorkflowInstanceStore(@"Server=DESKTOP-OIGV51O\SQLEXPRESS;database=WFTest;uid=sa;pwd=123");
//绑定数据库
app.InstanceStore = store;
到这一步数据库中便已经能够查看到数据了,接下来要在需要的位置获取我们的书签
5.继续执行后续步骤
//继续执行
//此处使用数据库中工作流的ID,而不是使用书签名
app.Load(Guid.Parse(textBox2.Text));
app.ResumeBookmark(textBox1.Text,null);
6.绑定生命周期事件
#region 工作流生命周期事件
app.Unloaded = delegate (WorkflowApplicationEventArgs er)
{
Console.WriteLine("工作流 {0} 卸载.", er.InstanceId);
};
app.Completed = delegate (WorkflowApplicationCompletedEventArgs er)
{
//textBox1.Text = er.Outputs["arg1"].ToString();
syncEvent.Set();
};
app.Aborted = delegate (WorkflowApplicationAbortedEventArgs er)
{
Console.WriteLine("工作流 {0} 终止.", er.InstanceId);
};
app.Idle = delegate (WorkflowApplicationIdleEventArgs er)
{ Console.WriteLine("工作流 {0} 空闲.", er.InstanceId);
syncEvent.Set(); //这里要唤醒,不让的话,当创建了一个书签之后,界面就卡死了。
};
app.PersistableIdle = delegate (WorkflowApplicationIdleEventArgs er)
{
var bookmarks = er.Bookmarks;
var instanceID = er.InstanceId;
//textBox1.Text = er.["arg1"].ToString();
Console.WriteLine("持久化");
return PersistableIdleAction.Unload;
};
app.OnUnhandledException = delegate (WorkflowApplicationUnhandledExceptionEventArgs er)
{
Console.WriteLine("OnUnhandledException in Workflow {0}\n{1}",
er.InstanceId, er.UnhandledException.Message);
return UnhandledExceptionAction.Terminate;
};
#endregion
代码:下载
上一篇:.net WCF WF4.5 下一篇:WCF使用相关
.net WCF WF4.5 状态机、书签与持久化的更多相关文章
- .net WCF WF4.5
花了两天时间学习使用WF,把一些遇到的问题记录下来,使用的环境是VS2017,网上的资料普遍太老了 需要注意,如果使用多项目同时启动的方式需要把WCF调整到WF启动顺序之上 1.怎么使用代码活动 新建 ...
- WCF使用相关
1.不显示WCF服务主机 在WCF项目属性中的WCF选项卡总关闭下图的选项 2.在其他项目中承载WCF服务 其他加载的操作一致,需要把WCF的endpoint和behavior节点复制到 启动服务的那 ...
- 【转】WF4.0 (基础篇)
转自:http://www.cnblogs.com/foundation/category/215023.html 作者:WXWinter —— 兰竹菊梅★春夏秋冬☆ —— wxwinter@16 ...
- 工作流模式 (zhuan)
http://www.cnblogs.com/soundcode/archive/2010/12/30/1922283.html *********************************** ...
- IPython+:一个交互式计算和开发环境
一. IPython基础 代码自动补全:Tab键 可补全内容包括:变量名.函数名.成员变量函数.目录文件 内省(Itrospection) 在变量名之前或之后加上问号(?),这样可以显示这个对象的相关 ...
- jupyter notebook :一个交互式计算和开发环境
一. IPython基础 代码自动补全:Tab键 可补全内容包括:变量名.函数名.成员变量函数.目录文件 内省(Itrospection) 在变量名之前或之后加上问号(?),这样可以显示这个对象的相关 ...
- IPython的使用技巧
?打印IPython简介 在IPython中直接输入?,可以打印出IPython的功能介绍 object ?内省功能 在变量后面加上?,可以打印出该变量的详细信息.例如图中一个列表对象,打印出该对象的 ...
- WF4 持久化 <第四篇>
一.基础示例 WF4 默认支持SQLServer的持续化,首先要执行目录C:\Windows\Microsoft.NET\Framework\v4.0.30319\SQL\en下的脚本: SqlPer ...
- [WF4.0 实战] WPF + WCF + WF 打造Hello World(基础篇)
本篇博客是一个基础的演示样例,也就是一个新手教程吧!让大家熟悉一下WPF + WCF + WF三者的关系!这仅仅是一个基础篇,下篇会继续深入,作为这段时间研究工作流的一个小小总结! 三者关系: WPF ...
随机推荐
- Markdown编辑器开发记录(一):开发的初衷和初期踩的坑
先说下选择Markdown编辑器的原因,我们进行平台开发,需要很多的操作手册和API文档,要在网站中展示出来就需要是HTML格式的文件,但是由于内容很多,不可能全部由技术人员进行文档的编写,如果是只有 ...
- Myeclipse2017C版本破解
原文地址: https://blog.csdn.net/qq_33945246/article/details/79589152
- 你好,我是梁桐铭,.NET程序员,啰嗦下过去几年来的感悟吧
序 所有的文章都会有序言,我的当然也不例外. 因为职业和工作的关系,很少有时间陪伴家人,感谢妻子10年以来的容忍和支持,感谢女儿给我生活带来的乐趣. 希望孩子长大了之后能热爱编程(可以不用以它谋生). ...
- 【Teradata】数据库初始化(sysinit和dip工具)
1.删除数据库对象 (1)使用root用户登录数据库节点 arcmain .LOGON 127.0.0.1/dbc,dbc_password; (2)清理所有数据库对象及数据 DELETE DATAB ...
- D - Counting Test Gym - 101532D 字符串
Yousef has a string s that is used to build a magical string w by repeating the string s infinitely ...
- MySQL高级知识(八)——ORDER BY优化
前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index. 0.准备 #1.创建test表. drop table i ...
- 雅礼集训【Day6-1】字符串
雅礼集训[Day6-1]字符串 假设我们有串\(a\),我们设\(a'\)为\(a\)翻转后按为取反过后的串. 我们只考虑前一半的,长为\(m\)的串.如果前半截匹配了\(a\)或者\(a'\),则\ ...
- [python] os.path.join() 与 sys.path
脚本文件本地目录挂入系统环境变量 import sys, os sys.path.append(os.pardir) print(sys.path) os.getcwd()获取当前目录路径 impor ...
- 网站建设部署与发布--笔记2-部署Apache
网站部署(Linux) 部署Apache 操作系统:CentOS 7.2 1.首先连接云服务器,清楚系统垃圾. $ yum clean all Loaded plugins: fastestmirro ...
- python装饰器(备忘)
# 装饰器decorator def deco1(fun): def PRINT(*args,**kwargs): print('------deco1------') fun(*args,**kwa ...