方法: WorkflowServiceHost を使用してアイドル動作を構成する
ワークフローは、外部からの働きかけによって再開される必要があるブックマークに遭遇すると、アイドル状態になります。たとえば、 Receive アクティビティを使用して配信されるメッセージをワークフローが待機している場合などです。 WorkflowIdleBehavior は、サービス インスタンスがアイドル状態になってから、インスタンスが永続化またはアンロードされるまでの時間を指定できる動作です。 これには、これらの時間の範囲を設定する 2 つのプロパティがあります。 TimeToPersist は、ワークフロー サービス インスタンスがアイドル状態になってから、そのワークフロー サービス インスタンスが永続化されるまでの時間の範囲を指定します。 TimeToUnload は、ワークフロー サービス インスタンスがアイドル状態になってから、そのワークフロー サービス インスタンスがアンロードされるまでの時間の範囲を指定します。アンロードとは、インスタンスをインスタンス ストアに永続化し、メモリから削除することを意味します。 このトピックでは、 WorkflowIdleBehavior を構成ファイルで構成する方法について説明します。
WorkflowIdleBehavior を構成するには
次の例に示すように、
<serviceBehaviors>
要素内の<behavior>
要素に<workflowIdle>
要素を追加します。<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 の詳細については、「ワークフロー サービス ホストの拡張機能」を参照してください。Note
前の構成サンプルでは、簡略化された構成を使用しています。 詳細については、「簡略化された構成」を参照してください。
コードのアイドル動作を変更するには
次の例では、プログラムによって永続化とアンロードを行う前に待機する時間を変更します。
// 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)