1 //------------------------------------------------------------ 2 // Copyright (c) Microsoft Corporation. All rights reserved. 3 //------------------------------------------------------------ 4 namespace System.ServiceModel.Activities.Dispatcher 5 { 6 using System.Globalization; 7 using System.ServiceModel; 8 using System.ServiceModel.Channels; 9 using System.Xml; 10 using SR2 = System.ServiceModel.Activities.SR; 11 12 class OperationExecutionFault : MessageFault 13 { 14 static FaultCode instanceAbortedCode; 15 static FaultCode instanceCompletedCode; 16 static FaultCode instanceTerminatedCode; 17 static FaultCode instanceSuspendedFaultCode; 18 static FaultCode instanceUnloadedFaultCode; 19 static FaultCode instanceNotFoundCode; 20 static FaultCode instanceLockedFaultCode; 21 static FaultCode operationNotAvailableFaultCode; 22 static FaultCode updatedFailedFaultCode; 23 24 FaultCode faultCode; 25 FaultReason faultReason; 26 OperationExecutionFault(string description, FaultCode subcode)27 OperationExecutionFault(string description, FaultCode subcode) 28 { 29 this.faultCode = FaultCode.CreateSenderFaultCode(subcode); 30 this.faultReason = new FaultReason(new FaultReasonText( 31 description, CultureInfo.CurrentCulture)); 32 } 33 34 public override FaultCode Code 35 { 36 get 37 { 38 return this.faultCode; 39 } 40 } 41 42 public override bool HasDetail 43 { 44 get 45 { 46 return false; 47 } 48 } 49 50 public override FaultReason Reason 51 { 52 get 53 { 54 return this.faultReason; 55 } 56 } 57 CreateTransactedLockException(Guid instanceId, string operationName)58 public static OperationExecutionFault CreateTransactedLockException(Guid instanceId, string operationName) 59 { 60 if (instanceLockedFaultCode == null) 61 { 62 instanceLockedFaultCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceLockedUnderTransaction, XD2.WorkflowServices.Namespace); 63 } 64 return new OperationExecutionFault(SR2.InstanceLockedUnderTransaction(operationName, instanceId), instanceLockedFaultCode); 65 } 66 CreateInstanceUnloadedFault(string description)67 public static OperationExecutionFault CreateInstanceUnloadedFault(string description) 68 { 69 if (instanceUnloadedFaultCode == null) 70 { 71 instanceUnloadedFaultCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceUnloaded, XD2.WorkflowServices.Namespace); 72 } 73 return new OperationExecutionFault(description, instanceUnloadedFaultCode); 74 } 75 CreateInstanceNotFoundFault(string description)76 public static OperationExecutionFault CreateInstanceNotFoundFault(string description) 77 { 78 if (instanceNotFoundCode == null) 79 { 80 instanceNotFoundCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceNotFound, XD2.WorkflowServices.Namespace); 81 } 82 return new OperationExecutionFault(description, instanceNotFoundCode); 83 } 84 CreateCompletedFault(string description)85 public static OperationExecutionFault CreateCompletedFault(string description) 86 { 87 if (instanceCompletedCode == null) 88 { 89 instanceCompletedCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceCompleted, XD2.WorkflowServices.Namespace); 90 } 91 return new OperationExecutionFault(description, instanceCompletedCode); 92 } 93 CreateTerminatedFault(string description)94 public static OperationExecutionFault CreateTerminatedFault(string description) 95 { 96 if (instanceTerminatedCode == null) 97 { 98 instanceTerminatedCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceTerminated, XD2.WorkflowServices.Namespace); 99 } 100 return new OperationExecutionFault(description, instanceTerminatedCode); 101 } 102 CreateSuspendedFault(Guid instanceId, string operationName)103 public static OperationExecutionFault CreateSuspendedFault(Guid instanceId, string operationName) 104 { 105 if (instanceSuspendedFaultCode == null) 106 { 107 instanceSuspendedFaultCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceSuspended, XD2.WorkflowServices.Namespace); 108 } 109 return new OperationExecutionFault(SR2.InstanceSuspended(operationName, instanceId), instanceSuspendedFaultCode); 110 } 111 CreateOperationNotAvailableFault(Guid instanceId, string operationName)112 public static OperationExecutionFault CreateOperationNotAvailableFault(Guid instanceId, string operationName) 113 { 114 if (operationNotAvailableFaultCode == null) 115 { 116 operationNotAvailableFaultCode = new FaultCode(XD2.WorkflowControlServiceFaults.OperationNotAvailable, XD2.WorkflowServices.Namespace); 117 } 118 return new OperationExecutionFault(SR2.OperationNotAvailable(operationName, instanceId), operationNotAvailableFaultCode); 119 } 120 CreateAbortedFault(string description)121 public static OperationExecutionFault CreateAbortedFault(string description) 122 { 123 if (instanceAbortedCode == null) 124 { 125 instanceAbortedCode = new FaultCode(XD2.WorkflowControlServiceFaults.InstanceAborted, XD2.WorkflowServices.Namespace); 126 } 127 return new OperationExecutionFault(description, instanceAbortedCode); 128 } 129 CreateUpdateFailedFault(string description)130 public static OperationExecutionFault CreateUpdateFailedFault(string description) 131 { 132 if (updatedFailedFaultCode == null) 133 { 134 updatedFailedFaultCode = new FaultCode(XD2.WorkflowControlServiceFaults.UpdateFailed, XD2.WorkflowServices.Namespace); 135 } 136 return new OperationExecutionFault(description, updatedFailedFaultCode); 137 } 138 IsAbortedFaultException(FaultException exception)139 public static bool IsAbortedFaultException(FaultException exception) 140 { 141 if (exception.Code != null && exception.Code.SubCode != null && 142 exception.Code.SubCode.Name == instanceAbortedCode.Name && exception.Code.SubCode.Namespace == instanceAbortedCode.Namespace) 143 { 144 return true; 145 } 146 else 147 { 148 return false; 149 } 150 } 151 OnWriteDetailContents(XmlDictionaryWriter writer)152 protected override void OnWriteDetailContents(XmlDictionaryWriter writer) 153 { 154 throw FxTrace.Exception.AsError(new NotImplementedException()); 155 } 156 } 157 } 158