如何:使用 WorkflowServiceHost 配置空闲行为

当工作流遇到必须由某种外部刺激恢复的书签时(例如,当工作流实例正在等待使用 Receive 活动传递消息时),将转入空闲状态。 WorkflowIdleBehavior 行为允许您指定服务实例进入空闲状态与保留或卸载服务实例之间的时间。 它包含两个使您能够设置这些时间跨度的属性。 TimeToPersist 指定工作流服务实例进入空闲状态与保留工作流服务实例之间的时间跨度。 TimeToUnload 指定工作流服务实例进入空闲状态与卸载工作流服务实例之间的时间跨度,其中,卸载意味着将实例保留到实例存储区中并从内存中将其删除。 本主题解释如何在配置文件中配置 WorkflowIdleBehavior

配置 WorkflowIdleBehavior

  1. <workflowIdle> 元素添加到 <serviceBehaviors> 元素中的 <behavior> 元素,如以下示例所示。

    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <workflowIdle timeToUnload="0:05:0" timeToPersist="0:04:0"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    

    timeToUnload 特性指定工作流服务实例进入空闲状态与卸载工作流服务之间的时间段。 timeToPersist 特性指定工作流服务实例进入空闲状态与保存该实例之间的时间段。 timeToUnload 默认值为 1 分钟。 timeToPersist 的默认值为 MaxValue。 如果要在内存中保留空闲实例,但是为实现可靠性而保持这些实例,请设置值以使 timeToPersist<timeToUnload。 如果要防止卸载空闲实例,请将 timeToUnload 设置为 MaxValue。 有关 WorkflowIdleBehavior 的详细信息,请参阅工作流服务主机扩展性

    备注

    上面的配置示例使用的是简化配置。 有关详细信息,请参阅简化配置

在代码中更改空闲行为

  • 下面的示例以编程方式更改保持和卸载之前的等待时间。

    // Code to create a WorkFlowServiceHost is not shown here.
    // Note that SqlWorkflowInstanceStore is in the System.Activities.DurableInstancing.dll.
    host.DurableInstancingOptions.InstanceStore = new SqlWorkflowInstanceStore(connectionString);
    WorkflowIdleBehavior alteredBehavior = new WorkflowIdleBehavior
    {
        // Alter the time to persist and unload.
        TimeToPersist = new TimeSpan(0, 4, 0),
        TimeToUnload = new TimeSpan(0, 5, 0)
    };
    //Remove the existing behavior and replace it with the new one.
    host.Description.Behaviors.Remove<WorkflowIdleBehavior>();
    host.Description.Behaviors.Add(alteredBehavior);
    
    ' Code to create a WorkflowServiceHost not shown here.
    ' Note that SqlWorkflowInstanceStore is in the System.Activities.DurableInstancing.dll
    host.DurableInstancingOptions.InstanceStore = New SqlWorkflowInstanceStore(connectionString)
    ' Create a new workflow behavior.
    Dim alteredBehavior As WorkflowIdleBehavior = New WorkflowIdleBehavior()
    
    ' Alter the time to persist and unload.
    alteredBehavior.TimeToPersist = New TimeSpan(0, 4, 0)
    alteredBehavior.TimeToUnload = New TimeSpan(0, 5, 0)
    ' Remove the existing behavior and add the new one.
    host.Description.Behaviors.Remove(Of WorkflowIdleBehavior)()
    host.Description.Behaviors.Add(alteredBehavior)
    

请参阅