想看源码请直接翻到最后,使用方式如下图

如果同时需要多个书签可以直接在需要的位置创建书签,会认为是同一个实例。

若需要实现的效果是同时需要好几个部门审核,那么只要在对应的位置同时创建多个书签即可。

编写书签代码活动

注意几个地方,创建书签需要继承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 状态机、书签与持久化的更多相关文章

  1. .net WCF WF4.5

    花了两天时间学习使用WF,把一些遇到的问题记录下来,使用的环境是VS2017,网上的资料普遍太老了 需要注意,如果使用多项目同时启动的方式需要把WCF调整到WF启动顺序之上 1.怎么使用代码活动 新建 ...

  2. WCF使用相关

    1.不显示WCF服务主机 在WCF项目属性中的WCF选项卡总关闭下图的选项 2.在其他项目中承载WCF服务 其他加载的操作一致,需要把WCF的endpoint和behavior节点复制到 启动服务的那 ...

  3. 【转】WF4.0 (基础篇)

    转自:http://www.cnblogs.com/foundation/category/215023.html 作者:WXWinter  ——  兰竹菊梅★春夏秋冬☆ —— wxwinter@16 ...

  4. 工作流模式 (zhuan)

    http://www.cnblogs.com/soundcode/archive/2010/12/30/1922283.html *********************************** ...

  5. IPython+:一个交互式计算和开发环境

    一. IPython基础 代码自动补全:Tab键 可补全内容包括:变量名.函数名.成员变量函数.目录文件 内省(Itrospection) 在变量名之前或之后加上问号(?),这样可以显示这个对象的相关 ...

  6. jupyter notebook :一个交互式计算和开发环境

    一. IPython基础 代码自动补全:Tab键 可补全内容包括:变量名.函数名.成员变量函数.目录文件 内省(Itrospection) 在变量名之前或之后加上问号(?),这样可以显示这个对象的相关 ...

  7. IPython的使用技巧

    ?打印IPython简介 在IPython中直接输入?,可以打印出IPython的功能介绍 object ?内省功能 在变量后面加上?,可以打印出该变量的详细信息.例如图中一个列表对象,打印出该对象的 ...

  8. WF4 持久化 <第四篇>

    一.基础示例 WF4 默认支持SQLServer的持续化,首先要执行目录C:\Windows\Microsoft.NET\Framework\v4.0.30319\SQL\en下的脚本: SqlPer ...

  9. [WF4.0 实战] WPF + WCF + WF 打造Hello World(基础篇)

    本篇博客是一个基础的演示样例,也就是一个新手教程吧!让大家熟悉一下WPF + WCF + WF三者的关系!这仅仅是一个基础篇,下篇会继续深入,作为这段时间研究工作流的一个小小总结! 三者关系: WPF ...

随机推荐

  1. 设置Linux环境变量的方法和区别_Ubuntu

    设置 Linux 环境变量可以通过 export 实现,也可以通过修改几个文件来实现,有必要弄清楚这两种方法以及这几个文件的区别. 通过文件设置 Linux 环境变量 首先是设置全局环境变量,对所有用 ...

  2. LeetCode算法题-Valid Anagram(Java实现)

    这是悦乐书的第198次更新,第205篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第61题(顺位题号是242).给定两个字符串s和t,写一个函数来确定t是否是s的anag ...

  3. Pycharm用鼠标滚轮控制字体大小

    一.pycharm字体放大的设置 File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双击) ...

  4. pip命令安装 pyinstaller失败解决办法

    写在前面,如果是用win10系统的用户,一定要先通过管理员模式打开命令窗口,我是直接按 win + x 键,选择 "Windows Powershell(管理员)",否则会提示:  ...

  5. 微信小程序跳转微信小程序新增配置项目 navigateToMiniProgramAppIdList

    每个小程序可跳转的其他小程序数量限制为不超过 10 个 从 2.4.0 版本以及指定日期(具体待定)开始,开发者提交新版小程序代码时,如使用了跳转其他小程序功能,则需要在代码配置中声明将要跳转的小程序 ...

  6. ionic app开发遇到的问题

    :processDebugResources FAILED FAILURE: Build failed with an exception. * What went wrong: Execution ...

  7. Linux 大爆炸:一个内核,无数发行版

    即使你是一个 Linux 新人,你可能也已经知道它不是一个单一的.整体的操作系统,而是一群项目.这个星座中不同的“星”组成了“发行版”.每个都提供了自己的 Linux 模式. 感谢这一系列发行版所提供 ...

  8. 【window】Windows10下为PHP安装redis扩展

    操作: 步骤1:D:\wamp\bin\apache\apache2.4.9\bin/php.ini中添加 ; php_redis extension=php_igbinary.dll extensi ...

  9. Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager 转发非原创

    Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager   Redis缓存服务器是一款key/value数据库,读11 ...

  10. MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK

    安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置 ...