コード例 #1
0
        /// <summary>
        /// Persist a completed scope to the persistence store.
        /// </summary>
        /// <param name="activity">
        /// The completed scope to pesist.
        /// </param>
        protected override void SaveCompletedContextActivity(Activity activity)
        {
            TraceHelper.Trace();

            try
            {
                PendingWorkItem workItem = new PendingWorkItem();
                workItem.Type = PendingWorkItem.ItemType.CompletedScope;
                workItem.SerialisedActivity = GetDefaultSerializedForm(activity);
                workItem.InstanceId         = WorkflowEnvironment.WorkflowInstanceId;
                workItem.StateId            = (Guid)activity.GetValue(
                    Activity.ActivityContextGuidProperty);

                WorkflowEnvironment.WorkBatch.Add(this, workItem);
            }
            catch (Exception e)
            {
                String errorMessage = RM.Get_Error_PersistenceServiceException(e.ToString());

                TraceHelper.Trace(errorMessage);

                PersistenceException persistenceException =
                    new PersistenceException(errorMessage, e);

                RaiseServicesExceptionNotHandledEvent(
                    persistenceException,
                    WorkflowEnvironment.WorkflowInstanceId);

                throw persistenceException;
            }
        }
コード例 #2
0
        /// <summary>
        /// Unlock a workflow instance.
        /// </summary>
        /// <param name="rootActivity">
        /// The root activity of the workflow instance.
        /// </param>
        protected override void UnlockWorkflowInstanceState(Activity rootActivity)
        {
            TraceHelper.Trace();

            try
            {
                PendingWorkItem workItem = new PendingWorkItem();
                workItem.Type       = PendingWorkItem.ItemType.UnlockWorkflow;
                workItem.InstanceId = WorkflowEnvironment.WorkflowInstanceId;

                WorkflowEnvironment.WorkBatch.Add(this, workItem);
            }
            catch (Exception e)
            {
                String errorMessage = RM.Get_Error_PersistenceServiceException(e.ToString());

                TraceHelper.Trace(errorMessage);

                PersistenceException persistenceException =
                    new PersistenceException(errorMessage, e);

                RaiseServicesExceptionNotHandledEvent(
                    persistenceException,
                    WorkflowEnvironment.WorkflowInstanceId);

                throw persistenceException;
            }
        }
コード例 #3
0
        /// <summary>
        /// Persist a workflow instance to the persistence store.
        /// </summary>
        /// <param name="rootActivity">
        /// Root activity of the workflow instance.
        /// </param>
        /// <param name="unlock">
        /// Indicates whether to unlock the instance when complete.
        /// </param>
        protected override void SaveWorkflowInstanceState(Activity rootActivity, bool unlock)
        {
            TraceHelper.Trace();

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

                PendingWorkItem workItem = new PendingWorkItem();
                workItem.Status     = GetWorkflowStatus(rootActivity);
                workItem.IsBlocked  = GetIsBlocked(rootActivity);
                workItem.Info       = GetSuspendOrTerminateInfo(rootActivity);
                workItem.StateId    = (Guid)rootActivity.GetValue(Activity.ActivityContextGuidProperty);
                workItem.Type       = PendingWorkItem.ItemType.Instance;
                workItem.InstanceId = WorkflowEnvironment.WorkflowInstanceId;
                workItem.Unlock     = unlock;
                if (workItem.Status != WorkflowStatus.Completed && workItem.Status != WorkflowStatus.Terminated)
                {
                    workItem.SerialisedActivity = GetDefaultSerializedForm(rootActivity);
                }
                else
                {
                    workItem.SerialisedActivity = new byte[0];
                }

                TimerEventSubscription timerEventSubscription =
                    ((TimerEventSubscriptionCollection)rootActivity.GetValue(
                         TimerEventSubscriptionCollection.TimerCollectionProperty)).Peek();

                if (timerEventSubscription == null)
                {
                    workItem.NextTimer = null;
                }
                else
                {
                    workItem.NextTimer = timerEventSubscription.ExpiresAt;
                }

                WorkflowEnvironment.WorkBatch.Add(this, workItem);
            }
            catch (Exception e)
            {
                WfLogHelper.WriteLog("持久化SaveWorkflowInstanceState发生异常:" + e.ToString());
                string errorMessage = RM.Get_Error_PersistenceServiceException(e.ToString());

                TraceHelper.Trace(errorMessage);

                PersistenceException persistenceException =
                    new PersistenceException(errorMessage, e);

                base.RaiseServicesExceptionNotHandledEvent(
                    persistenceException,
                    WorkflowEnvironment.WorkflowInstanceId);

                throw persistenceException;
            }
        }
コード例 #4
0
        /// <summary>
        /// Unlock a workflow instance.
        /// </summary>
        /// <param name="rootActivity">
        /// The root activity of the workflow instance.
        /// </param>
        protected override void UnlockWorkflowInstanceState(Activity rootActivity)
        {
            TraceHelper.Trace();

            try
            {
                PendingWorkItem workItem = new PendingWorkItem();
                workItem.Type       = PendingWorkItem.ItemType.ActivationComplete;
                workItem.InstanceId = WorkflowEnvironment.WorkflowInstanceId;

                WorkflowEnvironment.WorkBatch.Add(this, workItem);
            }
            catch (Exception e)
            {
                TraceHelper.Trace(unexpectedExceptionText, e);

                base.RaiseServicesExceptionNotHandledEvent(e, WorkflowEnvironment.WorkflowInstanceId);
            }
        }
コード例 #5
0
        /// <summary>
        /// Persist a completed scope to the persistence store.
        /// </summary>
        /// <param name="completedScopeActivity">
        /// The completed scope to pesist.
        /// </param>
        protected override void SaveCompletedContextActivity(Activity completedScopeActivity)
        {
            TraceHelper.Trace();

            try
            {
                PendingWorkItem workItem = new PendingWorkItem();
                workItem.Type = PendingWorkItem.ItemType.CompletedScope;
                workItem.SerialisedActivity = GetDefaultSerializedForm(completedScopeActivity);
                workItem.InstanceId         = WorkflowEnvironment.WorkflowInstanceId;
                workItem.StateId            = (Guid)completedScopeActivity.GetValue(
                    Activity.ActivityContextGuidProperty);

                WorkflowEnvironment.WorkBatch.Add(this, workItem);
            }
            catch (Exception e)
            {
                TraceHelper.Trace(unexpectedExceptionText, e);

                base.RaiseServicesExceptionNotHandledEvent(e, WorkflowEnvironment.WorkflowInstanceId);
            }
        }
コード例 #6
0
        /// <summary>
        /// Insert instance state into the persistence store.
        /// </summary>
        /// <param name="workItem"></param>
        /// <param name="ownerId"></param>
        /// <param name="ownedUntil"></param>
        public void InsertInstanceState(PendingWorkItem workItem, Guid ownerId, DateTime ownedUntil)
        {
            Tracer.Debug("�־û�InsertInstanceState InstanceId=" + workItem.InstanceId + ";ownerId=" + ownerId + ";ʱ��=" + ownedUntil);

            using (DbCommand dbCommand = CreateCommand(nameResolver.ResolveCommandName(PersistenceCommandName.InsertInstanceState), CommandType.StoredProcedure))
            {
                string instanceParameter = nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.InstanceId);

                string resultParameter = nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.Result);

                AddParameter(dbCommand, instanceParameter,
                    workItem.InstanceId, AdoDbType.Guid);

                //DbParameter dp= AddParameter(dbCommand, nameResolver.ResolveParameterName(
                //    PersistenceCommandName.InsertInstanceState,
                //    PersistenceParameterName.State), workItem.SerialisedActivity,
                //    AdoDbType.Binary);

                #region beyond

                MySqlCommand cmd2 = (MySqlCommand)dbCommand.Connection.CreateCommand();

                ////OracleTransaction tx;
                //tx = conn.BeginTransaction();

                //cmd2.Transaction = tx;
                cmd2.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
                cmd2.Parameters.Add(new MySqlParameter("tempblob", MySqlDbType.Blob));
                cmd2.Parameters["tempblob"].Direction = ParameterDirection.Output;

                cmd2.ExecuteNonQuery();

                OracleLob tempLob;

                tempLob = (OracleLob)cmd2.Parameters["tempblob"].Value;
                tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
                tempLob.Write(workItem.SerialisedActivity, 0, workItem.SerialisedActivity.Length);
                tempLob.EndBatch();

                MySqlParameter p_STATE = new MySqlParameter("p_STATE", MySqlDbType.Blob);
                p_STATE.Direction = ParameterDirection.Input;
                p_STATE.Value = tempLob;
                dbCommand.Parameters.Add(p_STATE);

                #endregion

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.Status), workItem.Status, AdoDbType.Int32);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.Unlock), workItem.Unlock, AdoDbType.Boolean);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.IsBlocked), workItem.IsBlocked,
                    AdoDbType.Boolean);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.Info), workItem.Info, AdoDbType.Text);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.OwnerId), ownerId, AdoDbType.Guid);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.OwnedUntil), ownedUntil.ToUniversalTime(),
                    AdoDbType.DateTime);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.NextTimer), workItem.NextTimer,
                    AdoDbType.DateTime);

                AddParameter(dbCommand, resultParameter,
                    AdoDbType.Int32, ParameterDirection.Output);

                AddParameter(dbCommand, nameResolver.ResolveParameterName(
                    PersistenceCommandName.InsertInstanceState,
                    PersistenceParameterName.CurrentOwnerId), AdoDbType.Guid,
                    ParameterDirection.Output);

                dbCommand.ExecuteNonQuery();

                checkResult(dbCommand, resultParameter, instanceParameter);
            }
        }