• 微软Workflow Foundation 高阶透视


    什么是工作流?
    工作流是一组同软件或人交互的活动,以及活动间的联系,可以像一个流程图,也可以像一个状态机。


    [图一,左边是流程图,右边是状态机]

    什么是微软Workflow Foundation?
    微软Workflow Foundation 是一组由基础运行组件和开发工具组成的工作流开发平台,它不是一个工作流产品。

    Workflow Foundation 中的工作流模式
    Workflow Foundation 中的工作流模式分为顺序工作流和状态机工作流两种。

    什么是顺序工作流(Sequential Workflow)?
    顺序工作流的执行过程是一个连续的活动序列,它在完成一个活动之后会去执行下一个活动,它允许分支和循环以及接收外部事件,但是只向前执行。

    什么是状态机工作流(State Machine Workflow)?
    一些业务过程在进行中呈现出不同的状态,在Workflow Foundation中用状态机来表示实际业务过程中的状态。状态机工作流由一组状态组成,每个状态可以接收一组事件,由事件来决定状态之间的转换,这样就实现了工作流的执行过程。
     

    Workflow Foundation 架构



    基础活动库/自定义活动库(Base Activity Library/Custom Activity Library) 
    运行时引擎(Runtime Engine) 
    运行时服务(Runtime Services) 

    活动库为工作流提供基本的元件,每个活动是相对独立的可执行单元。
    运行时引擎为工作流提供运行环境,管理工作流的生命周期。
    运行时服务会在运行时引擎中加载,他们为工作流提供辅助的服务。

    Workflow Foundation 中的运行时服务包括:
    计划服务(管理工作流的工作方式):DefaultWorkflowSchedulerService、ManualWorkflowSchedulerService。
    批处理服务:DefaultWorkflowCommitWorkBatchService,SharedConnectionWorkflowCommitWorkService。
    持久化服务(将工作流实例存储在硬盘上):SqlWorkflowPresistenceService。
    跟踪服务:SqlTrackingService,SqlTrackingQuery。

    以上服务均要通过运行时引擎(Workflow Runtime)加载。

    Workflow 如何与外部交互?
    组成Workflow的每一个Activity都可以接收外部事件,由Workflow接受的接口中的事件可将外部数据发送到工作流,工作流通过方法将数据发送给外部。

     
    Workflow Foundation 如何支持分布式应用?
    Workflow Foundation 内建支持基于Web Service 与 WCF 的分布式应用。在基础活动库中提供了通用的Web Service活动。

    通过WebServiceInputActivity、WebServiceOutputActivity将工作流发布为Web服务。
    通过InvokeWebServiceActivity调用Web服务。

    Workflow Foundation 开发基本过程包括哪些?
    1、分析业务流程,提取功能点并封装成Activity,可以利用微软的基础Activity库与自定义Activity组合。
    基础Activity实现通用操作,自定义Activity实现业务。

    2、利用微软提供的Workflow Designer 组织Activity 配置控制逻辑

    3、找到Workflow与应用程序的交互点,通过定义接口使应用程序与Workflow建立协作关系,在应用程序中实现这些接口

    4、根据业务需要为工作流配置运行时要启用的服务,如持久化、计划服务等。

    Workflow Foundation 运行环境/开发环境
    运行环境:
    Windows Vista
    Windows XP
    Windows 2003

    开发环境:
    Visual Studio 2005+Visual Studio 2005 Extensions for .net 3.0( Workflow Foundation )
    Visual Studio 2008


     

    见微知著 — 从一小段代码观察Workflow Foundation
    一段工作在Asp.net的全局代码:

    1. void Application_Start(object sender, EventArgs e)
    2.     {
    3.         //创建工作流运行时实例
    4.         System.Workflow.Runtime.WorkflowRuntime workflowRuntime =
    5.         new System.Workflow.Runtime.WorkflowRuntime();

    6.         //创建工作流计划服务并在运行时服务中加载
    7.         System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService manualService =
    8.         new System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService();
    9.         workflowRuntime.AddService(manualService);

    10.         //启动工作流运行时
    11.         workflowRuntime.StartRuntime();

    12.         //存储工作流运行时实例到Application对象 这是Asp.net中的全局对象
    13.         Application["WorkflowRuntime"] = workflowRuntime;
    14.     }

    15. 一段工作Asp.net页中的代码:
    16. protected void StartRuntime_Click(object sender, EventArgs e)
    17.     {
    18.         //引用工作流运行时对象
    19.         WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;

    20.         //从运行时对象中取出计划服务实例
    21.         ManualWorkflowSchedulerService manualScheduler =
    22.         workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService))
    23.         as ManualWorkflowSchedulerService;

    24.         //通过运行时对象创建一个类型为ASPNetSequentialWorkflow的顺序工作流实例
    25.         WorkflowInstance instance = workflowRuntime.CreateWorkflow(
    26.         typeof(ASPNetSequentialWorkflow));
    27.         //启动工作流实例
    28.         instance.Start();
    29.         //让工作流实例参与计划服务
    30.         manualScheduler.RunWorkflow(instance.InstanceId);
    31. }
  • 相关阅读:
    python signal模块
    linux 下修改时间
    CentOS7关闭防火墙和SELinux
    centOS安装配置NFS
    python 调 java(胶水就是胶水)
    uuid
    python 最麻烦的时间有药了
    linux crontab
    Linux awk+uniq+sort 统计文件中某字符串出现次数并排序
    trove taskmanger api
  • 原文地址:https://www.cnblogs.com/JiangMingFeng/p/1563320.html
Copyright © 2020-2023  润新知