在WF4.0中使用IWorkflowInstanceExtension恢复书签

在前一篇文章中,我介绍了如何通过使用NativeActivity创建一个异步的活动以及创建书签来暂停工作流的执行。在 WorkflowApplication中使用书签非常的容易,在WorkflowInvoker 和WorkflowServiceHost中呢?

如何使用WorkflowInvoker和WorkflowServiceHost?

WorkflowInvoker 和WorkflowServiceHost中都没有ResumeBookmark函数,那我们如何使用它们来恢复书签呢?诀窍就是使IWorkflowInstanceExtension。

使用IWorkflowInstanceExtension

没有基类和接口需要,工作流可以扩展成任何您想要的类型。但是那也意味它们不知道工作流运行时的环境,并且不能对来自工作流调用做出更多的反应。通过实现 IWorkflowInstanceExtension接口,能够做到这些。这个接口有两个方法。其中一个是SetInstance,通过在运行工作流周围的一个封装的对象允许我们完成很多工作。最重要是,这也能让我们恢复书签。

我的工作流扩展基本上是等待活动调用,一旦完成等待一秒钟,恢复书签.A

class MyExtension : IWorkflowInstanceExtension
{
    private WorkflowInstanceProxy _instance;
     public IEnumerable<object> GetAdditionalExtensions()
     {
       return null;
     }
    public void SetInstance(WorkflowInstanceProxy instance)
    {
       _instance = instance;
    }
     public void WaitSome(Bookmark bookmark)
     {
        ThreadPool.QueueUserWorkItem(state =>
         {
            Thread.Sleep(1000);
            var ias = _instance.BeginResumeBookmark(bookmark, 42, null,null);
            var result = _instance.EndResumeBookmark(ias);
            Console.WriteLine("BookmarkResumptionResult: '{0}'", result);
          }
);
  }
}

注意 GetAdditionalExtensions()函数返回null,因为我们没有添加额外的扩展。

时间: 2024-11-08 19:33:03

在WF4.0中使用IWorkflowInstanceExtension恢复书签的相关文章

WF4.0中四种自定义类型活动

工作流中的活动就像用户自定义的控件,将许多的功能封装起来用.WF4.0中提供了四种可继承的活动 类:CodeActivity .AsyncCodeActivity.Activity.NativeActivity.这几种活动都有自己使用的适合 场合,正确的使用这些活动将非常有利. 1.CodeActivity WF4.0中的活动是树形结构的,创建叶子活动最简单是方式就是使用CodeActivity ,它的逻辑都放在 一个方法:Execute 里面,这个也是四种活动中最简单的一种.这里用一个简单的自

WF4.0中实现子流程

工作流服务中,经常会在主流程启用一些子流程.我在审批流程中经常会使用bookmark来暂停流程,这篇文章,将结合bookmark来实现主流程启动子流程. 使用以前的一篇WF4.0自定义持久化中的自定义的持久化.不过数据表中加入了一个字段parentid,用于标识父流程: 下面用一个流程实例为例说明主流程是如何启用子流程,子流程又是如何返回主流程的,主流程如下:

WF4.0中如何实现XAML工作流的动态加载

我接下来还是用一个例子讲解一下如何在WF 4中动态加载xaml工作流的做法吧. 1. 创建自定义的Activity using System; using System. Collections.Generic; using System.Linq; using System.Text; using System.Activities; namespace WorkflowConsole Application1 { public sealed class MyActivity : CodeAc

一起谈.NET技术,WF4.0中如何实现XAML工作流的动态加载

我接下来还是用一个例子讲解一下如何在WF 4中动态加载xaml工作流的做法吧. 1. 创建自定义的Activity using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Activities; namespace WorkflowConsoleApplication1{ public sealed class MyActivity : CodeActivity

WF4.0实战(二十二):一个实际生活中状态机的例子

这是实际生活中的一个状态机的例子:"门".这个例子是Mebyon Kernow写的,使用状态机对门的状态进行控制,我觉得是学习WF4.0中 状态机的好例子.所以,简单的翻译了他这篇文章.希望对你学习WF4.0的状态机有所帮助.以下是正文.原文是:A practical State Machine example 现在,状态机的活动已经发布在Codeplex上面了(详见:http://wf.codeplex.com/).我找出一个经常使用的例子.用这个例子用来演 示如何使用状态机来控制一

WF4.0 基础篇(二十九) WorkflowInspectionServices

WorkflowInspectionServices 类 WorkflowInspectionServices可以得到流程中的Activity,由于WF4.0的ActivityTree相对复杂,并不是象 WF3.X的结构那样清晰, 在WF4.0中Activitys,Body,Implementation等了Activity属性比效多,要循环Activity 就要做很多判断,这时可以使用WorkflowInspectionServices得到ActivityTree上的所有Activity. Wo

WF4.0 基础篇(二十八) WF调用PowerShell

PowerShell 提供了命令行管理系统的功能,但通常情况下,操作人员要完成某种业务需要多组PowerShell 命令,这样会很烦琐,错误率也比效高.操作人员可以编写powerShell脚本来组织命令,本文将介绍如何使用WF来 组织PowerShell命令,让操作人员只关心具体的命令,在一个可视化的流程设计器中组织命令间的逻辑关系 WF4.0中并没有提供调用powerShell的Activity,但可以使用中 Microsoft.Activities.PowerShell.Dll与 Invok

WF4.0基础篇 (二十一) WorkflowInvoker

本文例子说明 WorkflowInvoker 类名 System.Activitys.WorkflowInvoker 文件 System.Activities.dll 结构说明 继承 Object 是一个 sealed类 override 了 [CacheMetadata方法] 与 [Execute方法] 功能说明 WorkflowApplication与WorkflowInvoker在调用流程上的区别 在WF4.0中,可以使用WorkflowApplication与 WorkflowInvok

WF4.0基础篇(三) 流程实例WorkflowApplication与设计WF程序的基本原则

通过本节,可以初步了解WF程序的特性,为以后的WF类应用开发提供一个初步的感性认识 本文的两个例子 http://files.cnblogs.com/foundation/LoadXamlSample.rar http://files.cnblogs.com/foundation/WorkflowApplicationSample.rar 流程实例WorkflowApplication与设计WF程序的基本原则 流程实例WorkflowApplication 我在[开始使用WF4.0.]中创建一个