protected internal override Activity LoadCompletedContextActivity(Guid id, Activity outerActivity) { using (PersistenceDBAccessor accessor = new PersistenceDBAccessor(this._dbResourceAllocator, this._enableRetries)) { return(WorkflowPersistenceService.RestoreFromDefaultSerializedForm(accessor.RetrieveCompletedScope(id), outerActivity)); } }
protected internal override Activity LoadWorkflowInstanceState(Guid id) { using (PersistenceDBAccessor accessor = new PersistenceDBAccessor(this._dbResourceAllocator, this._enableRetries)) { WorkflowTrace.Host.TraceEvent(TraceEventType.Information, 0, "SqlWorkflowPersistenceService({0}):Loading instance {1}", new object[] { this._serviceInstanceId.ToString(), id.ToString() }); return(WorkflowPersistenceService.RestoreFromDefaultSerializedForm(accessor.RetrieveInstanceState(id, this._serviceInstanceId, this.OwnershipTimeout), null)); } }
protected internal override void SaveCompletedContextActivity(Activity completedScopeActivity) { PendingWorkItem workItem = new PendingWorkItem { Type = PendingWorkItem.ItemType.CompletedScope, SerializedActivity = WorkflowPersistenceService.GetDefaultSerializedForm(completedScopeActivity), InstanceId = WorkflowEnvironment.WorkflowInstanceId, StateId = ((ActivityExecutionContextInfo)completedScopeActivity.GetValue(Activity.ActivityExecutionContextInfoProperty)).ContextGuid }; WorkflowEnvironment.WorkBatch.Add(this, workItem); }
protected internal override void SaveWorkflowInstanceState(Activity rootActivity, bool unlock) { if (rootActivity == null) { throw new ArgumentNullException("rootActivity"); } WorkflowStatus workflowStatus = WorkflowPersistenceService.GetWorkflowStatus(rootActivity); bool isBlocked = WorkflowPersistenceService.GetIsBlocked(rootActivity); string suspendOrTerminateInfo = WorkflowPersistenceService.GetSuspendOrTerminateInfo(rootActivity); Guid guid = (Guid)rootActivity.GetValue(Activity.ActivityContextGuidProperty); PendingWorkItem workItem = new PendingWorkItem { Type = PendingWorkItem.ItemType.Instance, InstanceId = WorkflowEnvironment.WorkflowInstanceId }; if ((workflowStatus != WorkflowStatus.Completed) && (workflowStatus != WorkflowStatus.Terminated)) { workItem.SerializedActivity = WorkflowPersistenceService.GetDefaultSerializedForm(rootActivity); } else { workItem.SerializedActivity = new byte[0]; } workItem.Status = (int)workflowStatus; workItem.Blocked = isBlocked ? 1 : 0; workItem.Info = suspendOrTerminateInfo; workItem.StateId = guid; workItem.Unlocked = unlock; TimerEventSubscription subscription = ((TimerEventSubscriptionCollection)rootActivity.GetValue(TimerEventSubscriptionCollection.TimerCollectionProperty)).Peek(); workItem.NextTimer = (subscription == null) ? SqlDateTime.MaxValue : subscription.ExpiresAt; if (workItem.Info == null) { workItem.Info = ""; } WorkflowTrace.Host.TraceEvent(TraceEventType.Information, 0, "SqlWorkflowPersistenceService({4}):Committing instance {0}, Blocked={1}, Unlocked={2}, NextTimer={3}", new object[] { guid.ToString(), workItem.Blocked, workItem.Unlocked, workItem.NextTimer.Value.ToLocalTime(), this._serviceInstanceId.ToString() }); WorkflowEnvironment.WorkBatch.Add(this, workItem); }
public SkipUnloadOnFirstIdleWorkflowPersistenceService(WorkflowPersistenceService inner) { if (inner == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("inner"); } this.inner = inner; }