Beispiel #1
0
 public override ActivityExecutionStatus HandleFault(Activity activity, ActivityExecutionContext executionContext, Exception exception)
 {
     if (activity.HasPrimaryClosed)
     {
         Activity faultHandlers = GetFaultHandlers(executionContext.Activity);
         if (((faultHandlers != null) && (faultHandlers.ExecutionStatus != ActivityExecutionStatus.Closed)) && (faultHandlers.ExecutionStatus != ActivityExecutionStatus.Initialized))
         {
             if (faultHandlers.ExecutionStatus == ActivityExecutionStatus.Executing)
             {
                 executionContext.CancelActivity(faultHandlers);
             }
             return(ActivityExecutionStatus.Faulting);
         }
         faultHandlers = GetCancellationHandler(executionContext.Activity);
         if (((faultHandlers != null) && (faultHandlers.ExecutionStatus != ActivityExecutionStatus.Closed)) && (faultHandlers.ExecutionStatus != ActivityExecutionStatus.Initialized))
         {
             if (faultHandlers.ExecutionStatus == ActivityExecutionStatus.Executing)
             {
                 executionContext.CancelActivity(faultHandlers);
             }
             return(ActivityExecutionStatus.Faulting);
         }
         if ((bool)activity.GetValue(FaultProcessedProperty))
         {
             this.SafeReleaseLockOnStatusChange(executionContext);
         }
     }
     return(base.HandleFault(activity, executionContext, exception));
 }
Beispiel #2
0
        public static ActivityExecutionStatus Cancel(CompositeActivity activity, ActivityExecutionContext executionContext)
        {
            for (int i = (activity.EnabledActivities.Count - 1); i >= 0; i--)
            {
                Activity childActivity = activity.EnabledActivities[i];

                if (childActivity.ExecutionStatus == ActivityExecutionStatus.Executing)
                {
                    executionContext.CancelActivity(childActivity);
                    return(activity.ExecutionStatus);
                }

                if (childActivity.ExecutionStatus == ActivityExecutionStatus.Canceling ||
                    childActivity.ExecutionStatus == ActivityExecutionStatus.Faulting)
                {
                    return(activity.ExecutionStatus);
                }

                if (childActivity.ExecutionStatus == ActivityExecutionStatus.Closed)
                {
                    activity.RemoveProperty(ActiveChildQualifiedNameProperty);
                    return(ActivityExecutionStatus.Closed);
                }
            }
            return(ActivityExecutionStatus.Closed);
        }
Beispiel #3
0
        public override ActivityExecutionStatus HandleFault(Activity activity, ActivityExecutionContext executionContext, Exception exception)
        {
            if (activity.HasPrimaryClosed != true)
            {
                return(base.HandleFault(activity, executionContext, exception));
            }

            //We are handed fault again. Quiten Fault & Cancellation Handlers if any running.
            Activity handlersActivity = FaultAndCancellationHandlingFilter.GetFaultHandlers(executionContext.Activity);

            if (handlersActivity != null && (handlersActivity.ExecutionStatus != ActivityExecutionStatus.Closed && handlersActivity.ExecutionStatus != ActivityExecutionStatus.Initialized))
            {
                if (handlersActivity.ExecutionStatus == ActivityExecutionStatus.Executing)
                {
                    executionContext.CancelActivity(handlersActivity);
                }

                return(ActivityExecutionStatus.Faulting);
            }
            else
            {
                handlersActivity = FaultAndCancellationHandlingFilter.GetCancellationHandler(executionContext.Activity);

                if (handlersActivity != null && (handlersActivity.ExecutionStatus != ActivityExecutionStatus.Closed && handlersActivity.ExecutionStatus != ActivityExecutionStatus.Initialized))
                {
                    if (handlersActivity.ExecutionStatus == ActivityExecutionStatus.Executing)
                    {
                        executionContext.CancelActivity(handlersActivity);
                    }
                    return(ActivityExecutionStatus.Faulting);
                }
            }

            if ((bool)activity.GetValue(FaultAndCancellationHandlingFilter.FaultProcessedProperty))
            {
                SafeReleaseLockOnStatusChange(executionContext);
            }

            return(base.HandleFault(activity, executionContext, exception));
        }
 protected internal override ActivityExecutionStatus Cancel(ActivityExecutionContext executionContext)
 {
     if (executionContext == null)
     {
         throw new ArgumentNullException("executionContext");
     }
     for (int i = 0; i < base.EnabledActivities.Count; i++)
     {
         Activity activity = base.EnabledActivities[i];
         if (activity.ExecutionStatus == ActivityExecutionStatus.Executing)
         {
             executionContext.CancelActivity(activity);
         }
         if ((activity.ExecutionStatus == ActivityExecutionStatus.Canceling) || (activity.ExecutionStatus == ActivityExecutionStatus.Faulting))
         {
             return(base.ExecutionStatus);
         }
     }
     return(ActivityExecutionStatus.Closed);
 }
        protected internal override ActivityExecutionStatus Cancel(ActivityExecutionContext executionContext)
        {
            if (executionContext == null)
            {
                throw new ArgumentNullException("executionContext");
            }

            for (int i = 0; i < this.EnabledActivities.Count; ++i)
            {
                Activity childActivity = this.EnabledActivities[i];

                if (childActivity.ExecutionStatus == ActivityExecutionStatus.Executing)
                {
                    executionContext.CancelActivity(childActivity);
                }
                if (childActivity.ExecutionStatus == ActivityExecutionStatus.Canceling ||
                    childActivity.ExecutionStatus == ActivityExecutionStatus.Faulting)
                {
                    return(this.ExecutionStatus);
                }
            }
            return(ActivityExecutionStatus.Closed);
        }