Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / ActivityExecutorOperation.cs / 1305376 / ActivityExecutorOperation.cs
namespace System.Workflow.ComponentModel { using System; using System.Diagnostics; using System.Globalization; using System.Collections.Generic; [Serializable] internal abstract class SchedulableItem { private int contextId = -1; string activityId = null; protected SchedulableItem(int contextId, string activityId) { this.contextId = contextId; this.activityId = activityId; } public int ContextId { get { return this.contextId; } } public string ActivityId { get { return this.activityId; } } public abstract bool Run(IWorkflowCoreRuntime workflowCoreRuntime); } internal enum ActivityOperationType : byte { Execute = 0, Cancel = 1, Compensate = 2, HandleFault = 3 } [Serializable] internal sealed class ActivityExecutorOperation : SchedulableItem { private string activityName; private ActivityOperationType operation; private Exception exceptionToDeliver; public ActivityExecutorOperation(Activity activity, ActivityOperationType opt, int contextId) : base(contextId, activity.QualifiedName) { this.activityName = activity.QualifiedName; this.operation = opt; } public ActivityExecutorOperation(Activity activity, ActivityOperationType opt, int contextId, Exception e) : this(activity, opt, contextId) { this.exceptionToDeliver = e; } public override bool Run(IWorkflowCoreRuntime workflowCoreRuntime) { // get state reader Activity contextActivity = workflowCoreRuntime.GetContextActivityForId(this.ContextId); Activity activity = contextActivity.GetActivityByName(this.activityName); using (workflowCoreRuntime.SetCurrentActivity(activity)) { using (ActivityExecutionContext activityExecutionContext = new ActivityExecutionContext(activity)) { ActivityExecutor activityExecutor = ActivityExecutors.GetActivityExecutor(activity); switch (this.operation) { case ActivityOperationType.Execute: if (activity.ExecutionStatus == ActivityExecutionStatus.Executing) { try { workflowCoreRuntime.RaiseActivityExecuting(activity); ActivityExecutionStatus newStatus = activityExecutor.Execute(activity, activityExecutionContext); if (newStatus == ActivityExecutionStatus.Closed) activityExecutionContext.CloseActivity(); else if (newStatus != ActivityExecutionStatus.Executing) throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Executing.ToString())); } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Execute of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; case ActivityOperationType.Cancel: if (activity.ExecutionStatus == ActivityExecutionStatus.Canceling) { try { ActivityExecutionStatus newStatus = activityExecutor.Cancel(activity, activityExecutionContext); if (newStatus == ActivityExecutionStatus.Closed) activityExecutionContext.CloseActivity(); else if (newStatus != ActivityExecutionStatus.Canceling) throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Canceling.ToString())); } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Cancel of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; case ActivityOperationType.Compensate: if (activity.ExecutionStatus == ActivityExecutionStatus.Compensating) { try { ActivityExecutionStatus newStatus = activityExecutor.Compensate(activity, activityExecutionContext); if (newStatus == ActivityExecutionStatus.Closed) activityExecutionContext.CloseActivity(); else if (newStatus != ActivityExecutionStatus.Compensating) throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Compensating.ToString())); } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Compensate of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; case ActivityOperationType.HandleFault: if (activity.ExecutionStatus == ActivityExecutionStatus.Faulting) { try { ActivityExecutionStatus newStatus = activityExecutor.HandleFault(activity, activityExecutionContext, this.exceptionToDeliver); if (newStatus == ActivityExecutionStatus.Closed) activityExecutionContext.CloseActivity(); else if (newStatus != ActivityExecutionStatus.Faulting) throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Faulting.ToString())); } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Compensate of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; } } } return true; } public override string ToString() { return "ActivityOperation(" + "(" + this.ContextId.ToString(CultureInfo.CurrentCulture) + ")" + this.activityName + ", " + ActivityOperationToString(this.operation) + ")"; } private string ActivityOperationToString(ActivityOperationType operationType) { string retVal = string.Empty; switch (operationType) { case ActivityOperationType.Execute: retVal = "Execute"; break; case ActivityOperationType.Cancel: retVal = "Cancel"; break; case ActivityOperationType.HandleFault: retVal = "HandleFault"; break; case ActivityOperationType.Compensate: retVal = "Compensate"; break; } return retVal; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. namespace System.Workflow.ComponentModel { using System; using System.Diagnostics; using System.Globalization; using System.Collections.Generic; [Serializable] internal abstract class SchedulableItem { private int contextId = -1; string activityId = null; protected SchedulableItem(int contextId, string activityId) { this.contextId = contextId; this.activityId = activityId; } public int ContextId { get { return this.contextId; } } public string ActivityId { get { return this.activityId; } } public abstract bool Run(IWorkflowCoreRuntime workflowCoreRuntime); } internal enum ActivityOperationType : byte { Execute = 0, Cancel = 1, Compensate = 2, HandleFault = 3 } [Serializable] internal sealed class ActivityExecutorOperation : SchedulableItem { private string activityName; private ActivityOperationType operation; private Exception exceptionToDeliver; public ActivityExecutorOperation(Activity activity, ActivityOperationType opt, int contextId) : base(contextId, activity.QualifiedName) { this.activityName = activity.QualifiedName; this.operation = opt; } public ActivityExecutorOperation(Activity activity, ActivityOperationType opt, int contextId, Exception e) : this(activity, opt, contextId) { this.exceptionToDeliver = e; } public override bool Run(IWorkflowCoreRuntime workflowCoreRuntime) { // get state reader Activity contextActivity = workflowCoreRuntime.GetContextActivityForId(this.ContextId); Activity activity = contextActivity.GetActivityByName(this.activityName); using (workflowCoreRuntime.SetCurrentActivity(activity)) { using (ActivityExecutionContext activityExecutionContext = new ActivityExecutionContext(activity)) { ActivityExecutor activityExecutor = ActivityExecutors.GetActivityExecutor(activity); switch (this.operation) { case ActivityOperationType.Execute: if (activity.ExecutionStatus == ActivityExecutionStatus.Executing) { try { workflowCoreRuntime.RaiseActivityExecuting(activity); ActivityExecutionStatus newStatus = activityExecutor.Execute(activity, activityExecutionContext); if (newStatus == ActivityExecutionStatus.Closed) activityExecutionContext.CloseActivity(); else if (newStatus != ActivityExecutionStatus.Executing) throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Executing.ToString())); } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Execute of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; case ActivityOperationType.Cancel: if (activity.ExecutionStatus == ActivityExecutionStatus.Canceling) { try { ActivityExecutionStatus newStatus = activityExecutor.Cancel(activity, activityExecutionContext); if (newStatus == ActivityExecutionStatus.Closed) activityExecutionContext.CloseActivity(); else if (newStatus != ActivityExecutionStatus.Canceling) throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Canceling.ToString())); } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Cancel of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; case ActivityOperationType.Compensate: if (activity.ExecutionStatus == ActivityExecutionStatus.Compensating) { try { ActivityExecutionStatus newStatus = activityExecutor.Compensate(activity, activityExecutionContext); if (newStatus == ActivityExecutionStatus.Closed) activityExecutionContext.CloseActivity(); else if (newStatus != ActivityExecutionStatus.Compensating) throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Compensating.ToString())); } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Compensate of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; case ActivityOperationType.HandleFault: if (activity.ExecutionStatus == ActivityExecutionStatus.Faulting) { try { ActivityExecutionStatus newStatus = activityExecutor.HandleFault(activity, activityExecutionContext, this.exceptionToDeliver); if (newStatus == ActivityExecutionStatus.Closed) activityExecutionContext.CloseActivity(); else if (newStatus != ActivityExecutionStatus.Faulting) throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Faulting.ToString())); } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Compensate of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; } } } return true; } public override string ToString() { return "ActivityOperation(" + "(" + this.ContextId.ToString(CultureInfo.CurrentCulture) + ")" + this.activityName + ", " + ActivityOperationToString(this.operation) + ")"; } private string ActivityOperationToString(ActivityOperationType operationType) { string retVal = string.Empty; switch (operationType) { case ActivityOperationType.Execute: retVal = "Execute"; break; case ActivityOperationType.Cancel: retVal = "Cancel"; break; case ActivityOperationType.HandleFault: retVal = "HandleFault"; break; case ActivityOperationType.Compensate: retVal = "Compensate"; break; } return retVal; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ServiceOperationUIEditor.cs
- XPathParser.cs
- TerminatorSinks.cs
- DataSourceViewSchemaConverter.cs
- SimpleBitVector32.cs
- DateBoldEvent.cs
- EntityParameterCollection.cs
- AsyncCompletedEventArgs.cs
- CompiledQueryCacheEntry.cs
- NullRuntimeConfig.cs
- ClusterUtils.cs
- ToolStripArrowRenderEventArgs.cs
- WebEventCodes.cs
- CommentGlyph.cs
- Inflater.cs
- MD5Cng.cs
- XmlBufferReader.cs
- WorkflowPersistenceService.cs
- SqlDataSourceParameterParser.cs
- SqlProviderServices.cs
- ContextProperty.cs
- LogExtent.cs
- NumericUpDownAccelerationCollection.cs
- XmlSchemaIdentityConstraint.cs
- ObjectDataSourceStatusEventArgs.cs
- ThreadStaticAttribute.cs
- MessageContractImporter.cs
- RegexWorker.cs
- ConfigurationSettings.cs
- FrameworkElement.cs
- SqlMetaData.cs
- TableCellCollection.cs
- BinaryFormatterWriter.cs
- PathFigureCollectionConverter.cs
- FontStyleConverter.cs
- XappLauncher.cs
- DesignerValidatorAdapter.cs
- HttpConfigurationSystem.cs
- Content.cs
- Stopwatch.cs
- ControlType.cs
- FileDialogPermission.cs
- CapabilitiesUse.cs
- EncodingNLS.cs
- WorkflowInvoker.cs
- XPathArrayIterator.cs
- DSGeneratorProblem.cs
- activationcontext.cs
- ResourceExpressionEditorSheet.cs
- FixedSOMTableRow.cs
- SoapEnvelopeProcessingElement.cs
- CounterSampleCalculator.cs
- CodeMemberField.cs
- MessageRpc.cs
- SoapServerMethod.cs
- TailCallAnalyzer.cs
- LogLogRecord.cs
- WebPartZoneBase.cs
- PropertyInformationCollection.cs
- unsafenativemethodsother.cs
- SQLString.cs
- MemoryFailPoint.cs
- UInt64Storage.cs
- WindowCollection.cs
- Control.cs
- FuncTypeConverter.cs
- DataSourceView.cs
- FormViewPageEventArgs.cs
- RecommendedAsConfigurableAttribute.cs
- HttpApplication.cs
- ToolStripSystemRenderer.cs
- wmiprovider.cs
- WebPartsPersonalization.cs
- GridViewColumn.cs
- ContractUtils.cs
- CategoryGridEntry.cs
- DesignerActionVerbList.cs
- OracleEncoding.cs
- MetaModel.cs
- GeneralTransformCollection.cs
- ClipboardData.cs
- DataRowCollection.cs
- ServiceModelConfigurationSectionGroup.cs
- FragmentNavigationEventArgs.cs
- LambdaExpression.cs
- DebugHandleTracker.cs
- StringUtil.cs
- TabletDevice.cs
- Lazy.cs
- DataErrorValidationRule.cs
- PointCollectionValueSerializer.cs
- ViewManager.cs
- QueryPageSettingsEventArgs.cs
- CompilerGlobalScopeAttribute.cs
- LinqDataSourceHelper.cs
- DecoderFallbackWithFailureFlag.cs
- SourceChangedEventArgs.cs
- RSAOAEPKeyExchangeFormatter.cs
- CollectionTraceRecord.cs
- WebSysDescriptionAttribute.cs