|
//----------------------------------------------------------------
// 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);
}
}
}
|