Information
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

SqlWorkflowInstanceStore.RunnableInstancesDetectionPeriod Property

.NET Framework (current version)
 

Specifies the time period after which the SQL Workflow Instance Store runs a detection task to detect any runnable or activatable workflow instances in the persistence database after the previous detection cycle.

Namespace:   System.Activities.DurableInstancing
Assembly:  System.Activities.DurableInstancing (in System.Activities.DurableInstancing.dll)

public TimeSpan RunnableInstancesDetectionPeriod { get; set; }

Property Value

Type: System.TimeSpan

Returns TimeSpan.

The SqlWorkflowInstanceStore runs an internal task that periodically wakes up and checks if any runnable instances exist in the persistence database. An instance is runnable, if it is not in the suspended state or the completed state and satisfies the following conditions:

  • The instance is unlocked and has a pending timer that has expired.

  • The instance is unlocked and its status is Executing.

  • The instance has an expired lock on it.

The SQL Workflow Instance Store raises the HasRunnableWorkflowEvent when it finds a runnable instance in the database and also finds a workflow host capable of loading the instance running on the computer.

When a workflow host receives this event, it executes the TryLoadRunnableWorkflowCommand against the instance store to load the instance into the memory.

The type of the property is TimeSpan and the value is of the form “hh:mm:ss”. The minimum value is “00:00:01” (1 sec). If omitted, defaults to “00:00:05” (5 secs). This parameter is an optional parameter.

The following code sample demonstrates using RunnableInstancesDetectionPeriod in a SqlWorkflowInstanceStore. This example is from the Built-in Configuration sample.

static void Main(string[] args)
{
    // Create service host.
    WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress));

    // Add service endpoint.
    host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");

    // Define SqlWorkflowInstanceStoreBehavior:
    //   Set interval to renew instance lock to 5 seconds.
    //   Set interval to check for runnable instances to 2 seconds.
    //   Instance Store does not keep instances after it is completed.
    //   Select exponential back-off algorithm when retrying to load a locked instance.
    //   Instance state information is compressed using the GZip compressing algorithm. 
    SqlWorkflowInstanceStoreBehavior instanceStoreBehavior = new SqlWorkflowInstanceStoreBehavior(connectionString);
    instanceStoreBehavior.HostLockRenewalPeriod = new TimeSpan(0, 0, 5);
    instanceStoreBehavior.RunnableInstancesDetectionPeriod = new TimeSpan(0, 0, 2);
    instanceStoreBehavior.InstanceCompletionAction = InstanceCompletionAction.DeleteAll;
    instanceStoreBehavior.InstanceLockedExceptionAction = InstanceLockedExceptionAction.AggressiveRetry;
    instanceStoreBehavior.InstanceEncodingOption = InstanceEncodingOption.GZip;
    host.Description.Behaviors.Add(instanceStoreBehavior);

    // Open service host.
    host.Open();

    // Create a client that sends a message to create an instance of the workflow.
    ICountingWorkflow client = ChannelFactory<ICountingWorkflow>.CreateChannel(new BasicHttpBinding(), new EndpointAddress(hostBaseAddress));
    client.start();

    Console.WriteLine("(Press [Enter] at any time to terminate host)");
    Console.ReadLine();
    host.Close();
}

.NET Framework
Available since 4.0
Return to top
Show: