Procedimiento para configurar el comportamiento inactivo con WorkflowServiceHost
Los flujos de trabajo pasan a estar inactivos cuando encuentran un marcador que se debe reanudar mediante algún estímulo externo, por ejemplo cuando la instancia de flujo de trabajo está esperando la entrega de un mensaje usando una actividad Receive . WorkflowIdleBehavior es un comportamiento que le permite especificar el tiempo transcurrido desde que una instancia de servicio pasa a estado inactivo hasta que la instancia se guarda o se descarga. Contiene dos propiedades que permiten establecer estas duraciones. TimeToPersist especifica el período de tiempo entre el momento en el que una instancia de servicio del flujo de trabajo se inactiva y el momento en el que dicha instancia se guarda. TimeToUnload especifica el intervalo de tiempo entre el momento en el que una instancia de servicio del flujo de trabajo se inactiva y el momento en el que dicha instancia se descarga, donde la descarga significa guardar la instancia en el almacén de instancia y eliminarla de la memoria. En este tema, se explica cómo configurar la clase WorkflowIdleBehavior en un archivo de configuración.
Para configurar WorkflowIdleBehavior
Agregue
<workflowIdle>
a<behavior>
dentro del elemento<serviceBehaviors>
como se muestra en el siguiente ejemplo.<behaviors> <serviceBehaviors> <behavior name=""> <workflowIdle timeToUnload="0:05:0" timeToPersist="0:04:0"/> </behavior> </serviceBehaviors> </behaviors>
El atributo
timeToUnload
especifica el período de tiempo entre el momento en el que una instancia de servicio del flujo de trabajo se inactiva y el momento en el que dicho servicio se descarga. El atributotimeToPersist
especifica el período de tiempo entre el momento en el que una instancia de servicio del flujo de trabajo se inactiva y el momento en el que dicha instancia se guarda. El valor predeterminado detimeToUnload
es 1 minuto. El valor predeterminado detimeToPersist
es MaxValue. Si desea conservar las instancias inactivas en memoria pero hacer que persistan por integridad, establezca los valores de modo quetimeToPersist
<timeToUnload
. Si desea impedir que las instancias inactivas se carguen, establezcatimeToUnload
en MaxValue. Para obtener más información sobre WorkflowIdleBehavior, consulte Extensibilidad de host de servicio de flujo de trabajo.Nota
En el ejemplo de configuración anterior, se usa la configuración simplificada. Para obtener más información, consulte Configuración simplificada.
Para cambiar el comportamiento inactivo en el código
En el siguiente ejemplo se cambia el tiempo que se espera antes de persistir y descargar mediante programación.
// 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)