• wf5 runtime services


     

    运行时服务包括:

    (1)

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

    (2)

    事务处理、持久化服务、跟踪服务、Threading、通信服务、Timer

     

    (3)Windows Workflow Foundation 服务

    Windows 工作流计划服务

    Windows 工作流计划服务管理工作流运行时引擎计划工作流实例的方式。无论这些服务是通过 DefaultWorkflowSchedulerService 以异步方式处理的,还是通过 ManualWorkflowSchedulerService 以手动、同步的方式处理的,它们都是工作流解决方案的重要 部分。

    Windows 工作流 CommitWorkBatch 服务

    Windows 工作流 CommitWorkBatch 服务的用途是启用与提交工作批次相关的自定义逻辑(又称作持久性点)。当提交工作批次时,运行时将对当前 CommitWorkBatch 服务进行调用并传递委托,该委托可以对工作批次执行实际提交。运行时仍必须执行提交,但是它允许服务将自身插入到进程中,从而支持针对提交进程进行一些自定义。

     使用 DefaultWorkflowCommitWorkBatchService

     使用 SharedConnectionWorkflowCommitWorkBatchService

    Windows 工作流持久性服务

     许多业务流程都需要花很长时间才能完成(长达数月或甚至数年)。将工作流保存在内存中不仅不切实际(由于内存限制的原因),而且,因为必须在单一服务器上处理实例,所以还会妨碍缩放。许多这些长期运行的工作流都是执行不活跃的流程或过程逻辑,并且实际上处于空闲状态,等待来自用户或其他系统的输入。通过卸载空闲的实例,主机应用程序将能够节省内存,并且能够跨处理服务器进行缩放。

    Windows 工作流跟踪服务

     使用 Windows Workflow Foundation 可以以一致、可靠而灵活的方式跟踪与工作流相关的信息。Windows Workflow Foundation 跟踪框架旨在使宿主通过捕获工作流执行期间引发的事件,而在执行期间可以观察到工作流实例。此框架为可插入式设计,使宿主可以编写自己的跟踪服务,也可以使用现成可用的或第三方跟踪服务。此外,由于使用 Windows Workflow Foundation 运行时引擎可以在其生存期过程中添加多个运行时服务,因此可以同时启用多个不同类型的跟踪服务。例如,Windows Workflow Foundation 包含一个现成可用的 SqlTrackingService 服务,此服务将数量可配置的跟踪信息写入 SQL Server 数据库。Windows Workflow Foundation 示例还包含一个示例 ConsoleTrackingService Sample,用于侦听事件和这些事件向控制台输出的内容。可以将这两个服务一起运行,以使最终用户可以查看工作流执行,并在开发过程中生成调试信息。

     

    Windows 工作流持久性服务------------>

    一、创建 SQL 持久性数据库

    (1)CREATE DATABASE WorkflowPersistenceStore
    (2)
    C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\EN
    (3)
    SqlPersistence_Schema(SQL 持久性服务表)
    SqlPersistence_Logic(SQL 持久性服务存储过程)

     

      二、修改 SqlWorkflowPersistenceService 的 App.config

      app.config->Services->

    <add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionString="Initial Catalog=WorkflowPersistenceStore;Data Source=localhost;Integrated Security=SSPI;"
         LoadIntervalSeconds="5"/>
     

    三、创建额外的工作流事件处理程序

    void InitializeWorkflow(){
        workflowRuntime = new WorkflowRuntime();
        string constr = "Initial Catalog=WorkflowPersistenceStore;Data Source=.;Integrated Security=SSPI;";
        Guid inId = new Guid("EE358EC3-5C7E-4DA5-A18F-40611044EA24");

        SqlWorkflowPersistenceService pservice = new SqlWorkflowPersistenceService(constr,true,TimeSpan.MaxValue,new TimeSpan(0,0,10));

        workflowRuntime.AddService(pservice);
        ExternalDataExchangeService dataservice = new ExternalDataExchangeService();
        workflowRuntime.AddService(dataservice);

        localservice = new LocalService();
        dataservice.AddService(localservice);
        waitHandle = new AutoResetEvent(false);
        workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); };
        workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
        {
            Console.WriteLine(e.Exception.Message);
            waitHandle.Set();
        };
        instance = workflowRuntime.CreateWorkflow(typeof(Workflow1));

        workflowRuntime.StartRuntime();

        bool isExsit = false;
        foreach (SqlPersistenceWorkflowInstanceDescription sd in pservice.GetAllWorkflows())
        {
            if (sd.WorkflowInstanceId == inId) {
                isExsit = true;
                break;
            }  
        }
        if (!isExsit)
        {
            instance.Start();
        }
       else {
           instance = workflowRuntime.GetWorkflow(inId);
            instance.Load();
            Console.WriteLine((new StateMachineWorkflowInstance(workflowRuntime, instance.InstanceId)).CurrentStateName);
        }
    }

  • 相关阅读:
    【UVA11324】 The Largest Clique (Tarjan+topsort/记忆化搜索)
    【洛谷2245】 星际导航 (最小瓶颈路)
    【UVA10816】Travel in Desert (最小瓶颈路+最短路)
    【洛谷 5002】专心OI
    炸金花【大模拟】
    【BZOJ1055】[HAOI2008]玩具取名(区间DP)
    【BZOJ1296】[SCOI2009]粉刷匠 (DP+背包)
    NOIP前的模板
    获取<考试>博文密码!o(*≧▽≦)ツ
    这是个萌新的萌新博客
  • 原文地址:https://www.cnblogs.com/chinaniit/p/1493124.html
Copyright © 2020-2023  润新知