作法:以 WorkflowServiceHost 設定閒置行為
工作流程遇到必須由外部刺激繼續執行的書籤時,例如工作流程執行個體正在等候訊息使用 Receive 活動加以傳遞時,工作流程就會進入閒置狀態。 WorkflowIdleBehavior 是一種行為,可讓您指定從服務執行個體進入閒置到此執行個體保存或卸載的間隔時間。 其中包含兩個屬性,可用來設定這些時間範圍。 TimeToPersist 會指定從工作流程服務執行個體進入閒置到工作流程服務執行個體保存的時間範圍。 TimeToUnload 會指定從工作流程服務執行個體進入閒置到工作流程服務執行個體卸載的時間範圍,而卸載的意義是將執行個體保存到執行個體儲存區並從記憶體中移除。 本主題說明如何設定組態檔中的 WorkflowIdleBehavior 。
若要設定 WorkflowIdleBehavior
如以下範例所示,新增
<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)