File: System\ServiceModel\Dispatcher\WorkflowInstanceProvider.cs
Project: ndp\cdf\src\NetFx35\System.WorkflowServices\System.WorkflowServices.csproj (System.WorkflowServices)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
 
namespace System.ServiceModel.Dispatcher
{
    class WorkflowInstanceProvider : DurableInstanceProvider
    {
        WorkflowInstanceContextProvider instanceContextProvider;
 
        public WorkflowInstanceProvider(WorkflowInstanceContextProvider instanceContextProvider)
            : base(instanceContextProvider)
        {
            this.instanceContextProvider = instanceContextProvider;
        }
 
        public override void ReleaseInstance(InstanceContext instanceContext, object instance)
        {
            WorkflowDurableInstance workflowDurableInstance = null;
 
            //If InstanceContext is taken down due to Exception(Like PersistenceException); 
            //Make sure we inform LifeTimeManager to cleanup the record.
            if (instanceContext.State == CommunicationState.Faulted || instanceContext.Aborted)
            {
                if (this.instanceContextProvider.InstanceLifeTimeManager != null)
                {
                    workflowDurableInstance = (WorkflowDurableInstance) instance;
                    this.instanceContextProvider.InstanceLifeTimeManager.CleanUp(workflowDurableInstance.InstanceId);
                }
            }
            base.ReleaseInstance(instanceContext, instance);
        }
    }
}