Jo Shields 3c1f479b9d Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
2015-04-07 09:35:12 +01:00

58 lines
2.0 KiB
C#

//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.Dispatcher
{
using System.ServiceModel.Channels;
class DurableInstanceProvider : IInstanceProvider
{
DurableInstanceContextProvider durableInstanceContextProvider;
public DurableInstanceProvider(DurableInstanceContextProvider instanceContextProvider)
{
this.durableInstanceContextProvider = instanceContextProvider;
}
public object GetInstance(InstanceContext instanceContext)
{
return ((IInstanceProvider) this).GetInstance(instanceContext, null);
}
public object GetInstance(InstanceContext instanceContext, Message message)
{
if (instanceContext == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("instanceContext");
}
return instanceContext.Extensions.Find<DurableInstance>();
}
public virtual void ReleaseInstance(InstanceContext instanceContext, object instance)
{
if (instanceContext == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("instanceContext");
}
if (instance == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("instance");
}
DurableInstance durableInstance = (DurableInstance) instance;
if (instanceContext.State == CommunicationState.Faulted || instanceContext.Aborted)
{
durableInstance.Abort();
this.durableInstanceContextProvider.UnbindAbortedInstance(instanceContext, durableInstance.InstanceId);
}
else if (instanceContext.State == CommunicationState.Closed)
{
durableInstance.Close();
}
}
}
}