|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.Activities.Dispatcher
{
using System.Globalization;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Xml;
using SR2 = System.ServiceModel.Activities.SR;
class OperationExecutionFault : MessageFault
{
static FaultCode instanceAbortedCode;
static FaultCode instanceCompletedCode;
static FaultCode instanceTerminatedCode;
static FaultCode instanceSuspendedFaultCode;
static FaultCode instanceUnloadedFaultCode;
static FaultCode instanceNotFoundCode;
static FaultCode instanceLockedFaultCode;
static FaultCode operationNotAvailableFaultCode;
static FaultCode updatedFailedFaultCode;
FaultCode faultCode;
FaultReason faultReason;
OperationExecutionFault(string description, FaultCode subcode)
{
this.faultCode = FaultCode.CreateSenderFaultCode(subcode);
this.faultReason = new FaultReason(new FaultReasonText(
description, CultureInfo.CurrentCulture));
}
public override FaultCode Code
{
get
{
return this.faultCode;
}
}
public override bool HasDetail
{
get
{
return false;
}
}
public override FaultReason Reason
{
get
{
return this.faultReason;
}
}
public static OperationExecutionFault CreateTransactedLockException(Guid instanceId, string operationName)
{
if (instanceLockedFaultCode == null)
{
instanceLockedFaultCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceLockedUnderTransaction, XD2.WorkflowServices.Namespace);
}
return new OperationExecutionFault(SR2.InstanceLockedUnderTransaction(operationName, instanceId), instanceLockedFaultCode);
}
public static OperationExecutionFault CreateInstanceUnloadedFault(string description)
{
if (instanceUnloadedFaultCode == null)
{
instanceUnloadedFaultCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceUnloaded, XD2.WorkflowServices.Namespace);
}
return new OperationExecutionFault(description, instanceUnloadedFaultCode);
}
public static OperationExecutionFault CreateInstanceNotFoundFault(string description)
{
if (instanceNotFoundCode == null)
{
instanceNotFoundCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceNotFound, XD2.WorkflowServices.Namespace);
}
return new OperationExecutionFault(description, instanceNotFoundCode);
}
public static OperationExecutionFault CreateCompletedFault(string description)
{
if (instanceCompletedCode == null)
{
instanceCompletedCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceCompleted, XD2.WorkflowServices.Namespace);
}
return new OperationExecutionFault(description, instanceCompletedCode);
}
public static OperationExecutionFault CreateTerminatedFault(string description)
{
if (instanceTerminatedCode == null)
{
instanceTerminatedCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceTerminated, XD2.WorkflowServices.Namespace);
}
return new OperationExecutionFault(description, instanceTerminatedCode);
}
public static OperationExecutionFault CreateSuspendedFault(Guid instanceId, string operationName)
{
if (instanceSuspendedFaultCode == null)
{
instanceSuspendedFaultCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceSuspended, XD2.WorkflowServices.Namespace);
}
return new OperationExecutionFault(SR2.InstanceSuspended(operationName, instanceId), instanceSuspendedFaultCode);
}
public static OperationExecutionFault CreateOperationNotAvailableFault(Guid instanceId, string operationName)
{
if (operationNotAvailableFaultCode == null)
{
operationNotAvailableFaultCode = new FaultCode(XD2.WorkflowControlServiceFaults.OperationNotAvailable, XD2.WorkflowServices.Namespace);
}
return new OperationExecutionFault(SR2.OperationNotAvailable(operationName, instanceId), operationNotAvailableFaultCode);
}
public static OperationExecutionFault CreateAbortedFault(string description)
{
if (instanceAbortedCode == null)
{
instanceAbortedCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceAborted, XD2.WorkflowServices.Namespace);
}
return new OperationExecutionFault(description, instanceAbortedCode);
}
public static OperationExecutionFault CreateUpdateFailedFault(string description)
{
if (updatedFailedFaultCode == null)
{
updatedFailedFaultCode = new FaultCode(XD2.WorkflowControlServiceFaults.UpdateFailed, XD2.WorkflowServices.Namespace);
}
return new OperationExecutionFault(description, updatedFailedFaultCode);
}
public static bool IsAbortedFaultException(FaultException exception)
{
if (exception.Code != null && exception.Code.SubCode != null &&
exception.Code.SubCode.Name == instanceAbortedCode.Name && exception.Code.SubCode.Namespace == instanceAbortedCode.Namespace)
{
return true;
}
else
{
return false;
}
}
protected override void OnWriteDetailContents(XmlDictionaryWriter writer)
{
throw FxTrace.Exception.AsError(new NotImplementedException());
}
}
}
|