Workflow中的四大已注册核心服务

Workflow中的四大已注册核心服务

核心运行时服务

名称

描述

可选

默认实现

计划服务

创建并管理线程,供运行时引擎执行工作流实例时使用

DefaultWorkflowSchedulerService

ManualWorkflowSchedulerService

Commit Work Batch

管理事务

DefaultWorkflowCommitWorkBatchService

SharedConnectionWorkflowCommitWorkBatchService

持久性服务

处理由运行时引擎操控的工作流实例的持久性

跟踪服务

通过记录跟踪事件提供实现工作流实例的能力

 

注:如果同时使用了SqlTrackingService(跟踪服务)和 SqlWorkflowPersistenService(持久化服务),那么为了体验最好的性能,应该为这两个服务使用同一个数据库和服务器。如果这两个服务使用了不同的数据库或数据库服务器,那么就必须从分布式事务处理协调器(DTC)中获取分布式事务。分布式事务会带来十分昂贵的性能消耗,应当避免这种做法。

如果为两个服务使用了同一个数据库,就可以加载SharedConnectionWorkflowCommitWorkBatchService来代替默认的提交批次服务,该服务为跟踪和持久性数据库使用了一个共享连接,以此来避免使用分布式事务。

 

使用四大服务

通过在配置文件中添加服务

<configuration>

 

  <configSections>

    <section name="WorkflowRuntime" type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

  </configSections>

 

  <WorkflowRuntime Name="WorkflowServiceContainer">

    <CommonParameters>

      <add name="ConnectionString" value="Data Source=.;Initial Catalog=WorkflowTracking;Integrated Security=True" />

    </CommonParameters>

    <Services>

      <add type="System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

      <add type="System.Workflow.Runtime.Hosting.SharedConnectionWorkflowCommitWorkBatchService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

      <add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

           UnloadOnIdle="true"/>

      <add type="System.Workflow.Runtime.Tracking.SqlTrackingService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

           IsTransactional="true" UseDefaultProfile="true" />

    </Services>

  </WorkflowRuntime>

 

</configuration>

 

ManualWorkflowSchedulerService 计划服务,在宿主程序线程上同步执行工作流

使用方法:
using (WorkflowRuntime workflowRuntime = new WorkflowRuntime("WorkflowRuntime"))

            {

                ManualWorkflowSchedulerService manualScheduler =

        workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService))

        as ManualWorkflowSchedulerService; //在宿主线程上执行工作流

 

//AutoResetEvent waitHandle = new AutoResetEvent(false);  当工作流中有delay活动时,必须添加

 

 定义事件(省略)

                WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WorkflowProject1.Workflow1), arguments);

                instance.Start();

 

                manualScheduler.RunWorkflow(instance.InstanceId); //在宿主线程上执行工作流

 

                //waitHandle.WaitOne();   当工作流中有delay活动时,必须添加

                Console.WriteLine("ok");

                Console.Read();

            }

 

上述实例添加了4个核心服务,添加第三个服务是因为sql server持久性服务和跟踪服务共享一个连接(同一个数据库),可以根据需求来修改配置文件 添加相应的服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值