void IActivityEventListener <ActivityExecutionStatusChangedEventArgs> .OnEvent(object sender, ActivityExecutionStatusChangedEventArgs e)
        {
            if (sender == null)
            {
                throw new ArgumentNullException("sender");
            }

            if (e == null)
            {
                throw new ArgumentNullException("e");
            }

            ActivityExecutionContext context = sender as ActivityExecutionContext;

            if (context == null)
            {
                throw new ArgumentException(SR.Error_SenderMustBeActivityExecutionContext, "sender");
            }

            if (e.ExecutionStatus == ActivityExecutionStatus.Closed)
            {
                // Remove status change subscription.
                e.Activity.UnregisterForStatusChange(Activity.ClosedEvent, this);

                // Do it again if there are any more.
                ActivityExecutionStatus status = CompensateTargetActivity(context);
                if (status == ActivityExecutionStatus.Closed)
                {
                    context.CloseActivity();
                }
            }
        }
示例#2
0
        void IActivityEventListener <ActivityExecutionStatusChangedEventArgs> .OnEvent(object sender, ActivityExecutionStatusChangedEventArgs e)
        {
            if (sender == null)
            {
                throw new ArgumentNullException("sender");
            }
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }
            ActivityExecutionContext context = sender as ActivityExecutionContext;

            if (context == null)
            {
                throw new ArgumentException("Error_SenderMustBeActivityExecutionContext", "sender");
            }
            if (e.ExecutionStatus == ActivityExecutionStatus.Closed)
            {
                e.Activity.UnregisterForStatusChange(Activity.ClosedEvent, this);
                if (this.CompensateTargetActivity(context) == ActivityExecutionStatus.Closed)
                {
                    context.CloseActivity();
                }
            }
        }
        protected internal sealed override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            executionContext.CloseActivity();
            string error = this.Error;

            executionContext.TerminateWorkflowInstance(new WorkflowTerminatedException(error));
            return(ActivityExecutionStatus.Closed);
        }
        protected internal sealed override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            executionContext.CloseActivity();
            string error = this.Error;

            executionContext.SuspendWorkflowInstance(error);
            return(ActivityExecutionStatus.Closed);
        }
示例#5
0
        void IActivityEventListener <EventArgs> .OnEvent(object sender, EventArgs e)
        {
            ActivityExecutionContext context = (ActivityExecutionContext)sender;

            if ((context.Activity.ExecutionStatus == ActivityExecutionStatus.Executing) && (ExecuteActivity(context.Activity, context, true) == ActivityExecutionStatus.Closed))
            {
                context.CloseActivity();
            }
        }
示例#6
0
        protected internal override sealed ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            executionContext.CloseActivity();

            string suspendReason = this.Error;

            executionContext.SuspendWorkflowInstance(suspendReason);
            return(ActivityExecutionStatus.Closed);
        }
        public void OnEvent(object sender, EventArgs e)
        {
            ActivityExecutionContext context = (ActivityExecutionContext)sender;

            if ((context.Activity.ExecutionStatus == ActivityExecutionStatus.Executing) && (this.ExecuteActivityNow(context) == ActivityExecutionStatus.Closed))
            {
                context.CloseActivity();
            }
        }
        public static void OnEvent(CompositeActivity activity, object sender, ActivityExecutionStatusChangedEventArgs e)
        {
            ActivityExecutionContext executionContext = sender as ActivityExecutionContext;

            e.Activity.UnregisterForStatusChange(Activity.ClosedEvent, (IActivityEventListener <ActivityExecutionStatusChangedEventArgs>)activity);
            if (((activity.ExecutionStatus == ActivityExecutionStatus.Canceling) || (activity.ExecutionStatus == ActivityExecutionStatus.Faulting)) || ((activity.ExecutionStatus == ActivityExecutionStatus.Executing) && !TryScheduleNextChild(activity, executionContext)))
            {
                activity.RemoveProperty(ActiveChildQualifiedNameProperty);
                executionContext.CloseActivity();
            }
        }
        public static void OnWorkflowChangesCompleted(CompositeActivity activity, ActivityExecutionContext executionContext)
        {
            string str  = activity.GetValue(ActiveChildQualifiedNameProperty) as string;
            bool   flag = (bool)activity.GetValue(ActiveChildRemovedProperty);

            if (((str != null) && flag) && (((activity.ExecutionStatus == ActivityExecutionStatus.Canceling) || (activity.ExecutionStatus == ActivityExecutionStatus.Faulting)) || ((activity.ExecutionStatus == ActivityExecutionStatus.Executing) && !TryScheduleNextChild(activity, executionContext))))
            {
                activity.RemoveProperty(ActiveChildQualifiedNameProperty);
                executionContext.CloseActivity();
            }
            activity.RemoveProperty(ActiveChildRemovedProperty);
        }
 protected internal override void OnWorkflowChangesCompleted(ActivityExecutionContext executionContext)
 {
     if (executionContext == null)
     {
         throw new ArgumentNullException("executionContext");
     }
     if (this.activeChildRemoved)
     {
         executionContext.CloseActivity();
         this.activeChildRemoved = false;
     }
     base.OnWorkflowChangesCompleted(executionContext);
 }
示例#11
0
        void IActivityEventListener <EventArgs> .OnEvent(object sender, EventArgs e)
        {
            ActivityExecutionContext context = (ActivityExecutionContext)sender;

            // only if activity is still executing, then run it
            if (context.Activity.ExecutionStatus == ActivityExecutionStatus.Executing)
            {
                ActivityExecutionStatus newStatus = TransactedContextFilter.ExecuteActivity(context.Activity, context, true);
                if (newStatus == ActivityExecutionStatus.Closed)
                {
                    context.CloseActivity();
                }
            }
        }
        public void OnEvent(object sender, EventArgs e)
        {
            ActivityExecutionContext context = (ActivityExecutionContext)sender;

            // only if activity is still executing, then run it
            if (context.Activity.ExecutionStatus == ActivityExecutionStatus.Executing)
            {
                ActivityExecutionStatus newStatus = ExecuteActivityNow(context);
                if (newStatus == ActivityExecutionStatus.Closed)
                {
                    context.CloseActivity();
                }
            }
        }
示例#13
0
        public static void OnWorkflowChangesCompleted(CompositeActivity activity, ActivityExecutionContext executionContext)
        {
            String activeChildQualifiedName          = activity.GetValue(ActiveChildQualifiedNameProperty) as String;
            bool   activeChildRemovedInDynamicUpdate = (bool)activity.GetValue(ActiveChildRemovedProperty);

            if (activeChildQualifiedName != null && activeChildRemovedInDynamicUpdate)
            {   //We have our active child removed.
                if (activity.ExecutionStatus == ActivityExecutionStatus.Canceling ||
                    activity.ExecutionStatus == ActivityExecutionStatus.Faulting ||
                    activity.ExecutionStatus == ActivityExecutionStatus.Executing && !TryScheduleNextChild(activity, executionContext))
                {
                    activity.RemoveProperty(ActiveChildQualifiedNameProperty);
                    executionContext.CloseActivity();
                }
            }
            activity.RemoveProperty(ActiveChildRemovedProperty);
        }
        void IActivityEventListener <ActivityExecutionStatusChangedEventArgs> .OnEvent(object sender, ActivityExecutionStatusChangedEventArgs e)
        {
            if (sender == null)
            {
                throw new ArgumentNullException("sender");
            }
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }

            ActivityExecutionContext context = sender as ActivityExecutionContext;

            if (context == null)
            {
                throw new ArgumentException(SR.Error_SenderMustBeActivityExecutionContext, "sender");
            }

            e.Activity.UnregisterForStatusChange(Activity.ClosedEvent, this);
            context.CloseActivity();
        }
        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 bool Run(IWorkflowCoreRuntime workflowCoreRuntime)
        {
            Activity activityByName = workflowCoreRuntime.GetContextActivityForId(base.ContextId).GetActivityByName(this.activityName);

            using (workflowCoreRuntime.SetCurrentActivity(activityByName))
            {
                using (ActivityExecutionContext context = new ActivityExecutionContext(activityByName))
                {
                    ActivityExecutor activityExecutor = ActivityExecutors.GetActivityExecutor(activityByName);
                    switch (this.operation)
                    {
                    case ActivityOperationType.Execute:
                        if (activityByName.ExecutionStatus != ActivityExecutionStatus.Executing)
                        {
                            goto Label_0309;
                        }
                        try
                        {
                            workflowCoreRuntime.RaiseActivityExecuting(activityByName);
                            ActivityExecutionStatus status = activityExecutor.Execute(activityByName, context);
                            if (status == ActivityExecutionStatus.Closed)
                            {
                                context.CloseActivity();
                            }
                            else if (status != ActivityExecutionStatus.Executing)
                            {
                                throw new InvalidOperationException(SR.GetString("InvalidExecutionStatus", new object[] { activityByName.QualifiedName, status.ToString(), ActivityExecutionStatus.Executing.ToString() }));
                            }
                            goto Label_0309;
                        }
                        catch (Exception exception)
                        {
                            WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Execute of Activity {0} threw {1}", new object[] { activityByName.QualifiedName, exception.ToString() });
                            throw;
                        }
                        break;

                    case ActivityOperationType.Cancel:
                        break;

                    case ActivityOperationType.Compensate:
                        goto Label_01A4;

                    case ActivityOperationType.HandleFault:
                        goto Label_0248;

                    default:
                        goto Label_0309;
                    }
                    if (activityByName.ExecutionStatus != ActivityExecutionStatus.Canceling)
                    {
                        goto Label_0309;
                    }
                    try
                    {
                        ActivityExecutionStatus status2 = activityExecutor.Cancel(activityByName, context);
                        if (status2 == ActivityExecutionStatus.Closed)
                        {
                            context.CloseActivity();
                        }
                        else if (status2 != ActivityExecutionStatus.Canceling)
                        {
                            throw new InvalidOperationException(SR.GetString("InvalidExecutionStatus", new object[] { activityByName.QualifiedName, status2.ToString(), ActivityExecutionStatus.Canceling.ToString() }));
                        }
                        goto Label_0309;
                    }
                    catch (Exception exception2)
                    {
                        WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Cancel of Activity {0} threw {1}", new object[] { activityByName.QualifiedName, exception2.ToString() });
                        throw;
                    }
Label_01A4:
                    if (activityByName.ExecutionStatus != ActivityExecutionStatus.Compensating)
                    {
                        goto Label_0309;
                    }
                    try
                    {
                        ActivityExecutionStatus status3 = activityExecutor.Compensate(activityByName, context);
                        if (status3 == ActivityExecutionStatus.Closed)
                        {
                            context.CloseActivity();
                        }
                        else if (status3 != ActivityExecutionStatus.Compensating)
                        {
                            throw new InvalidOperationException(SR.GetString("InvalidExecutionStatus", new object[] { activityByName.QualifiedName, status3.ToString(), ActivityExecutionStatus.Compensating.ToString() }));
                        }
                        goto Label_0309;
                    }
                    catch (Exception exception3)
                    {
                        WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Compensate of Activity {0} threw {1}", new object[] { activityByName.QualifiedName, exception3.ToString() });
                        throw;
                    }
Label_0248:
                    if (activityByName.ExecutionStatus == ActivityExecutionStatus.Faulting)
                    {
                        try
                        {
                            ActivityExecutionStatus status4 = activityExecutor.HandleFault(activityByName, context, this.exceptionToDeliver);
                            if (status4 == ActivityExecutionStatus.Closed)
                            {
                                context.CloseActivity();
                            }
                            else if (status4 != ActivityExecutionStatus.Faulting)
                            {
                                throw new InvalidOperationException(SR.GetString("InvalidExecutionStatus", new object[] { activityByName.QualifiedName, status4.ToString(), ActivityExecutionStatus.Faulting.ToString() }));
                            }
                            goto Label_0309;
                        }
                        catch (Exception exception4)
                        {
                            WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Compensate of Activity {0} threw {1}", new object[] { activityByName.QualifiedName, exception4.ToString() });
                            throw;
                        }
                    }
                }
            }
Label_0309:
            return(true);
        }