码迷,mamicode.com
首页 > Web开发 > 详细

.net WCF WF4.5 状态机、书签与持久化

时间:2018-04-04 21:06:57      阅读:724      评论:0      收藏:0      [点我收藏+]

标签:system   resume   led   als   恢复   rabl   this   event   microsoft   

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

 技术分享图片

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

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

编写书签代码活动

注意几个地方,创建书签需要继承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","1");
            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);

代码:下载

上一篇:.net WCF WF4.5

.net WCF WF4.5 状态机、书签与持久化

标签:system   resume   led   als   恢复   rabl   this   event   microsoft   

原文地址:https://www.cnblogs.com/ives/p/WF_BOOKMARK.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!