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);
    }
}

原文地址:https://www.cnblogs.com/chinaniit/p/1493124.html