private void ClearTrackingSource() { if (_trackingSource != null) { _trackingSource.Clear(); _trackingSource = null; } }
public WorkflowApplication CreateWorkflow(Activity activity, IDictionary <string, object> inputs, Guid instanceId, bool notUseActivityStackTrace, bool usePersistAndLog) { if (_instances.Value.ContainsKey(instanceId)) { throw new DeveloperException("Процесс с кодом '{0}' уже существует.", instanceId); } var result = new WorkflowApplication(activity, inputs) { SynchronizationContext = SynchronizationContext.Current }; //Настраиваем Activity StackTrace ClearTrackingSource(); if (!notUseActivityStackTrace) { _trackingSource = new ActivityStackTrace(); result.Extensions.Add(CreateActivityTrackingParticipant()); } var traceExtension = new TraceExtension { NotUseActivityStackTrace = notUseActivityStackTrace, UsePersistAndLog = usePersistAndLog }; traceExtension.Set(TraceExtension.ParentWfInstanceIdPropertyName, instanceId); traceExtension.Set(TraceExtension.ActivityTrackingSourcePropertyName, _trackingSource); result.Extensions.Add(traceExtension); if (usePersistAndLog) { result.InstanceStore = new XmlWorkflowInstanceStore(result.Id); //Create the persistence Participant and add it to the workflow instance result.Extensions.Add(new XmlPersistenceParticipant(instanceId, result.Id)); //Add a tracking participant result.Extensions.Add(new SaveAllEventsToFileTrackingParticipant()); } _instances.Value.Add(instanceId, result); _keyLink.Value.Add(result.Id, instanceId); // пропишем события SubscribeEvents(result); if (usePersistAndLog) { result.Persist(); } return(result); }