Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LinkTarget.cs
- AssemblyBuilder.cs
- DefaultBindingPropertyAttribute.cs
- WebPartConnectionsCancelVerb.cs
- HebrewCalendar.cs
- SkipQueryOptionExpression.cs
- TraceSwitch.cs
- ListComponentEditorPage.cs
- Pen.cs
- ButtonRenderer.cs
- FileAuthorizationModule.cs
- OuterGlowBitmapEffect.cs
- DataObjectCopyingEventArgs.cs
- StaticTextPointer.cs
- SqlVersion.cs
- NetPeerTcpBindingElement.cs
- BasicHttpMessageCredentialType.cs
- MarkupWriter.cs
- ZipArchive.cs
- WindowsListViewSubItem.cs
- ImpersonateTokenRef.cs
- FixedTextBuilder.cs
- PolygonHotSpot.cs
- InheritanceRules.cs
- BatchParser.cs
- CapabilitiesRule.cs
- MatrixTransform3D.cs
- Parameter.cs
- BitmapScalingModeValidation.cs
- RuntimeCompatibilityAttribute.cs
- _Connection.cs
- DataContext.cs
- TaskFormBase.cs
- HashMembershipCondition.cs
- ModelProperty.cs
- AttachmentCollection.cs
- DataGridViewToolTip.cs
- SortExpressionBuilder.cs
- EditorZone.cs
- filewebrequest.cs
- VariableQuery.cs
- SaveFileDialog.cs
- SmtpMail.cs
- DataControlField.cs
- XmlSchemaValidator.cs
- WindowsNonControl.cs
- Dictionary.cs
- Padding.cs
- ConfigXmlWhitespace.cs
- RightsDocument.cs
- ListBoxItemWrapperAutomationPeer.cs
- ObjectView.cs
- BaseCodePageEncoding.cs
- SrgsSubset.cs
- X509CertificateCollection.cs
- documentsequencetextview.cs
- CriticalHandle.cs
- CompiledQuery.cs
- DataGridViewRowStateChangedEventArgs.cs
- Point3DCollection.cs
- EpmCustomContentDeSerializer.cs
- ConsoleTraceListener.cs
- CounterCreationDataConverter.cs
- UrlEncodedParameterWriter.cs
- ObservableDictionary.cs
- ReadOnlyCollection.cs
- CodeIterationStatement.cs
- SqlInternalConnection.cs
- WindowsListViewScroll.cs
- QilInvokeLateBound.cs
- ActivityExecutorDelegateInfo.cs
- XmlSchemaComplexContentRestriction.cs
- PersonalizationProviderCollection.cs
- StylusDownEventArgs.cs
- ButtonFlatAdapter.cs
- RegexInterpreter.cs
- HtmlElement.cs
- UriTemplateTrieLocation.cs
- PrinterSettings.cs
- XComponentModel.cs
- WizardForm.cs
- WorkflowEnvironment.cs
- TileBrush.cs
- Point4DValueSerializer.cs
- AtlasWeb.Designer.cs
- SequentialActivityDesigner.cs
- Encoder.cs
- GestureRecognitionResult.cs
- ConnectionPoint.cs
- DebuggerAttributes.cs
- ThreadStateException.cs
- PersonalizableTypeEntry.cs
- RoleGroup.cs
- XmlSchemaFacet.cs
- AuthenticatingEventArgs.cs
- Stylesheet.cs
- MarshalByRefObject.cs
- GeneralTransform2DTo3DTo2D.cs
- DataGridViewSelectedRowCollection.cs
- RecognizerStateChangedEventArgs.cs