private static MySqlInstanceStore CreateInstanceStore(System.Activities.Activity workflow, out InstanceHandle ownerHandle) { try { var storeId = new Guid("0bfcc3a5-3c77-421b-b575-73533563a1f3"); var store = new MySqlInstanceStore(storeId); ownerHandle = store.CreateInstanceHandle(); var wfHostTypeName = GetWorkflowHostTypeName(workflow); var WorkflowHostTypePropertyName = GetWorkflowHostTypePropertyName(); var ownerCommand = new CreateWorkflowOwnerCommand() { InstanceOwnerMetadata = { { WorkflowHostTypePropertyName, new InstanceValue(wfHostTypeName) } } }; var owner = store.Execute(ownerHandle, ownerCommand, TimeSpan.FromSeconds(30)).InstanceOwner; ownerHandle.Free(); store.DefaultInstanceOwner = owner; return(store); } catch (Exception ex) { throw ex; } }
private void MarkInstanceOwnerLost(long surrogateLockOwnerId) { if (this.SurrogateLockOwnerId == surrogateLockOwnerId) { this.SurrogateLockOwnerId = -1L; InstanceHandle target = this.lockOwnerInstanceHandle.Target as InstanceHandle; if (target != null) { target.Free(); } if (this.sqlWorkflowInstanceStore.IsLockRetryEnabled()) { this.sqlWorkflowInstanceStore.LoadRetryHandler.AbortPendingRetries(); } if (this.LockRenewalTask != null) { this.LockRenewalTask.CancelTimer(); } if (this.LockRecoveryTask != null) { this.LockRecoveryTask.CancelTimer(); } if (this.InstanceDetectionTask != null) { this.InstanceDetectionTask.CancelTimer(); } } }
void MarkInstanceOwnerLost(long surrogateLockOwnerId) { Fx.Assert(this.isBeingModified, "Must have modification lock to mark owner as lost"); if (this.SurrogateLockOwnerId == surrogateLockOwnerId) { this.SurrogateLockOwnerId = -1; InstanceHandle instanceHandle = this.lockOwnerInstanceHandle.Target as InstanceHandle; if (instanceHandle != null) { instanceHandle.Free(); } if (this.sqlWorkflowInstanceStore.IsLockRetryEnabled()) { this.sqlWorkflowInstanceStore.LoadRetryHandler.AbortPendingRetries(); } if (this.LockRenewalTask != null) { this.LockRenewalTask.CancelTimer(); } if (this.LockRecoveryTask != null) { this.LockRecoveryTask.CancelTimer(); } if (this.InstanceDetectionTask != null) { this.InstanceDetectionTask.CancelTimer(); } } }
private static SqlWorkflowInstanceStore CreateInstanceStore(WorkflowHandlerBase workflowInstance, out InstanceHandle ownerHandle) { try { //WriteDebug("CreateInstanceStore: " + workflowInstance.WorkflowInstanceGuid + ", nodeId: " + workflowInstance.Id); var store = new SqlWorkflowInstanceStore(ConnectionString); ownerHandle = store.CreateInstanceHandle(); var wfHostTypeName = GetWorkflowHostTypeName(workflowInstance); var WorkflowHostTypePropertyName = GetWorkflowHostTypePropertyName(); var ownerCommand = new CreateWorkflowOwnerCommand() { InstanceOwnerMetadata = { { WorkflowHostTypePropertyName, new InstanceValue(wfHostTypeName) } } }; var owner = store.Execute(ownerHandle, ownerCommand, TimeSpan.FromSeconds(30)).InstanceOwner; ownerHandle.Free(); store.DefaultInstanceOwner = owner; return(store); } catch (Exception e) { WriteError("CreateInstanceStore", e); throw; } }
internal static InstanceStore InitializeWorkflowInstanceStore() { //return new XmlWorkflowInstanceStore(); string connectionString = ConfigurationManager.ConnectionStrings["wf"].ConnectionString; var store = new SqlWorkflowInstanceStore(connectionString); //TODO: выставить после отладки //store.InstanceEncodingOption = InstanceEncodingOption.GZip; // про настройки тут: https://msdn.microsoft.com/ru-ru/library/ee395770(v=vs.110).aspx store.InstanceLockedExceptionAction = InstanceLockedExceptionAction.AggressiveRetry; store.InstanceCompletionAction = InstanceCompletionAction.DeleteAll; store.HostLockRenewalPeriod = new TimeSpan(0, 0, 5); store.RunnableInstancesDetectionPeriod = new TimeSpan(0, 0, 10); InstanceHandle handle = null; try { handle = store.CreateInstanceHandle(); var view = store.Execute(handle, new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(5)); store.DefaultInstanceOwner = view.InstanceOwner; } finally { if (handle != null) { handle.Free(); } } return(store); }
/// <summary> /// Removes the store owner upon application shut down. This allows another service to recover workflows from other machines. /// This should be called from a dispose method in your application /// </summary> /// <param name="timeout"></param> public static void RemoveStoreOwner(TimeSpan timeout) { var deleteOwner = new DeleteWorkflowOwnerCommand(); InstanceHandle handle = Store.CreateInstanceHandle(); Store.Execute(handle, deleteOwner, timeout); handle.Free(); }
//<Snippet1> static void SetupInstanceStore() { instanceStore = new SqlWorkflowInstanceStore(@"Data Source=.\SQLEXPRESS;Initial Catalog=SampleInstanceStore;Integrated Security=True;Asynchronous Processing=True"); InstanceHandle handle = instanceStore.CreateInstanceHandle(); InstanceView view = instanceStore.Execute(handle, new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30)); handle.Free(); instanceStore.DefaultInstanceOwner = view.InstanceOwner; }
private static void DeleteInstanceStoreOwner() { try { InstanceHandle handle = instanceStore.CreateInstanceHandle(); InstanceView view = instanceStore.Execute(handle, new DeleteWorkflowOwnerCommand(), TimeSpan.FromSeconds(30)); handle.Free(); } catch (Exception ex) { throw ex; } }
public WorkflowInstance LoadWorkflow(Guid instanceId) { var instance = this._repository.LoadWorkflowInstance(instanceId); var activity = Helpers.LoadWorkflowActiovityFromXaml(this._workflowRepositoryPath + instance.WorkflowName, this._errorLogger); if (activity != null) { WorkflowApplication app = new WorkflowApplication(activity); app.Extensions.Add(() => { SQLTrackingPaticipant participant = new SQLTrackingPaticipant(); participant.ConnectionString = _connectionString; participant.TrackingProfile = CreateTrackingProfile(); return(participant); }); if (this._isPersistable) { //setup persistence InstanceStore store = new SqlWorkflowInstanceStore( this._connectionString); InstanceHandle handle = store.CreateInstanceHandle(); InstanceView view = store.Execute(handle, new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30)); handle.Free(); store.DefaultInstanceOwner = view.InstanceOwner; app.InstanceStore = store; app.PersistableIdle = (e) => { return(PersistableIdleAction.Persist); }; } try { app.Load(instanceId); app.Run(); instance.SetApplicationhost(app); instance.SetWorkflowInstanceHandeler(this); instance.State = InstanceState.Loaded; instance.InstanceId = instanceId; this._managedWorkflows.Add(instance); this._repository.UpdateWorkflowInstanceState(app.Id, InstanceState.Loaded, instance.Bookmarks.ConvertStringListToCommaSeparatedString()); return(instance); } catch (Exception ex) { this._errorLogger.Log(ex.Message, LoggerInfoTypes.Error); } } return(null); }
private static InstanceOwner CreateWorkflowInstanceOwner(InstanceStore store) { InstanceHandle handle = null; try { handle = store.CreateInstanceHandle(); return(CreateWorkflowInstanceOwner(store, handle)); } finally { handle?.Free(); } }
private static void DeleteWorkflowInstanceOwner(InstanceStore store, InstanceOwner owner, Guid instanceId) { InstanceHandle handle = null; var command = new DeleteWorkflowOwnerCommand(); try { handle = store.CreateInstanceHandle(owner, instanceId); store.Execute(handle, command, TimeSpan.FromMinutes(1.0)); store.DefaultInstanceOwner = null; } finally { handle?.Free(); } }
public static InstanceStore SetupInstanceStore() { //***********Important Notice************* //You need to modify the following line of code before running the sample. //Replace the value of myConnectionString with the value of the "Connection String" property //of the WorkflowInstanceStore database on your own machine. string myConnectionString = @"Data Source=localhost;Initial Catalog=PersistenceDB;Integrated Security=True"; InstanceStore instanceStore = new SqlWorkflowInstanceStore(myConnectionString); InstanceHandle handle = instanceStore.CreateInstanceHandle(); InstanceView view = instanceStore.Execute(handle, new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30)); handle.Free(); instanceStore.DefaultInstanceOwner = view.InstanceOwner; return(instanceStore); }
public Guid NewWorkFlow(string workflowName, IDictionary <string, object> parameters) { var activity = Helpers.LoadWorkflowActiovityFromXaml(this._workflowRepositoryPath + workflowName, this._errorLogger); if (activity != null) { WorkflowApplication app = new WorkflowApplication(activity, parameters); app.Extensions.Add(() => { SQLTrackingPaticipant participant = new SQLTrackingPaticipant(); participant.ConnectionString = _connectionString; return(participant); }); if (this._isPersistable) { //setup persistence InstanceStore store = new SqlWorkflowInstanceStore( this._connectionString); InstanceHandle handle = store.CreateInstanceHandle(); InstanceView view = store.Execute(handle, new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30)); handle.Free(); store.DefaultInstanceOwner = view.InstanceOwner; app.InstanceStore = store; app.PersistableIdle = (e) => { return(PersistableIdleAction.Unload); }; } try { app.Run(); var wfinstance = new WorkflowInstance(workflowName, this, app); wfinstance.State = InstanceState.Created; wfinstance.InstanceId = app.Id; this._managedWorkflows.Add(wfinstance); this._repository.SaveWorkflowInstanceState(app.Id, workflowName, InstanceState.Created, string.Empty); return(app.Id); } catch (Exception ex) { this._errorLogger.Log(ex.Message, LoggerInfoTypes.Error); } } return(Guid.Empty); }
private static InstanceStore CreateInstanceStore() { var store = new SqlWorkflowInstanceStore(FrameworkEnvironment.Instance.Configuration.GetConnectionString()) { InstanceEncodingOption = InstanceEncodingOption.GZip, RunnableInstancesDetectionPeriod = TimeSpan.FromSeconds(10), HostLockRenewalPeriod = TimeSpan.FromSeconds(10), InstanceCompletionAction = InstanceCompletionAction.DeleteNothing, InstanceLockedExceptionAction = InstanceLockedExceptionAction.AggressiveRetry }; HostTypeName = XName.Get(Name, typeof(WorkflowInstanceService).FullName ?? string.Empty); Handle = CreateOwnerHandle(store); //store.Execute(Handle, new DeleteWorkflowOwnerCommand(), TimeSpan.FromSeconds(10)); Handle.Free(); return(store); }
private static void SetupInstanceStore() { try { instanceStore = new SqlWorkflowInstanceStore(ConfigurationManager.ConnectionStrings["WFConnection"].ToString()); instanceStore.InstanceCompletionAction = InstanceCompletionAction.DeleteNothing; InstanceHandle handle = instanceStore.CreateInstanceHandle(); InstanceView view = instanceStore.Execute(handle, new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30)); handle.Free(); instanceStore.DefaultInstanceOwner = view.InstanceOwner; } catch (Exception ex) { throw ex; } }
SqlWorkflowInstanceStore CreateInstanceStore(String cnnString) { String cnnStr = cnnString; if (cnnStr.IndexOf("Asynchronous Processing") == -1) { cnnStr += ";Asynchronous Processing=True"; } var _store = new SqlWorkflowInstanceStore(cnnStr) { InstanceLockedExceptionAction = InstanceLockedExceptionAction.AggressiveRetry, HostLockRenewalPeriod = _wfTimeSpan, RunnableInstancesDetectionPeriod = TimeSpan.FromSeconds(RUNNABLE_INSTANCES_DETECTION_PERIOD), InstanceCompletionAction = InstanceCompletionAction.DeleteNothing }; InstanceHandle handle = _store.CreateInstanceHandle(); InstanceView view = _store.Execute(handle, new CreateWorkflowOwnerCommand(), _wfTimeSpan); _store.DefaultInstanceOwner = view.InstanceOwner; handle.Free(); return(_store); }
private static SqlWorkflowInstanceStore CreateInstanceStore(System.Activities.Activity workflow, out InstanceHandle ownerHandle) { try { var store = new SqlWorkflowInstanceStore(ConnectionString); ownerHandle = store.CreateInstanceHandle(); var wfHostTypeName = GetWorkflowHostTypeName(workflow); var WorkflowHostTypePropertyName = GetWorkflowHostTypePropertyName(); var ownerCommand = new CreateWorkflowOwnerCommand() { InstanceOwnerMetadata = { { WorkflowHostTypePropertyName, new InstanceValue(wfHostTypeName) } } }; var owner = store.Execute(ownerHandle, ownerCommand, TimeSpan.FromSeconds(30)).InstanceOwner; ownerHandle.Free(); store.DefaultInstanceOwner = owner; return(store); } catch (Exception ex) { throw ex; } }
static void Main(string[] args) { // create the workflow app and add handlers for the Idle and Completed actions WorkflowApplication app = new WorkflowApplication(new Sequence1()); //setup persistence InstanceStore store = new SqlWorkflowInstanceStore(@"Data Source=.\SQLEXPRESS;Initial Catalog=WF45GettingStartedTutorial;Integrated Security=True"); InstanceHandle handle = store.CreateInstanceHandle(); InstanceView view = store.Execute(handle, new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30)); handle.Free(); store.DefaultInstanceOwner = view.InstanceOwner; app.InstanceStore = store; app.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e) { syncEvent.Set(); return(PersistableIdleAction.Unload); }; app.Unloaded = delegate(WorkflowApplicationEventArgs e) { syncEvent.Set(); }; app.Completed = delegate(WorkflowApplicationCompletedEventArgs e) { Console.WriteLine("Workflow {0} Completed.", e.InstanceId); syncEvent.Set(); }; // start the application id = app.Id; app.Run(); syncEvent.WaitOne(); // resume bookmark 1 string text = Console.ReadLine(); app = new WorkflowApplication(new Sequence1()); app.InstanceStore = store; app.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e) { syncEvent.Set(); return(PersistableIdleAction.Unload); }; app.Completed = (workflowApplicationCompletedEventArgs) => { Console.WriteLine("WF Bookmark1 has Completed in the {0} state.", workflowApplicationCompletedEventArgs.CompletionState); syncEvent.Set(); }; app.Unloaded = (workflowApplicationEventArgs) => { Console.WriteLine("WF Bookmark1 unloaded"); syncEvent.Set(); }; app.Load(id); app.ResumeBookmark("readText", text); syncEvent.WaitOne(); // resume bookmark 2 int number = ReadNumberFromConsole(); app = new WorkflowApplication(new Sequence1()); app.InstanceStore = store; app.Completed = (workflowApplicationCompletedEventArgs) => { Console.WriteLine("WF Bookmark2 has Completed in the {0} state.", workflowApplicationCompletedEventArgs.CompletionState); syncEvent.Set(); }; app.Unloaded = (workflowApplicationEventArgs) => { Console.WriteLine("WF Bookmark1 unloaded"); syncEvent.Set(); }; app.Load(id); app.ResumeBookmark("readNumber", number); syncEvent.WaitOne(); Console.WriteLine(""); Console.WriteLine("Press [ENTER] to exit..."); Console.ReadLine(); }
public void Dispose() { this.Execute(_handle, new DeleteWorkflowOwnerCommand(), TimeSpan.FromSeconds(30)); _handle.Free(); }
public WorkflowService( IUsersService users ) { _users = users; T = NullLocalizer.Instance; Logger = NullLogger.Instance; SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(_users.ApplicationConnectionString); _wfApp = new WorkflowApplication(new NKD.Workflow.AssignMetadata()); _wfApp.InstanceStore = store; XName wfHostTypeName = XName.Get("NKD", _users.ApplicationID.ToString()); Dictionary <XName, object> wfScope = new Dictionary <XName, object> { { workflowHostTypePropertyName, wfHostTypeName } }; _wfApp.AddInitialInstanceValues(wfScope); _wfApp.Extensions.Add(new MetadataExtension()); List <XName> variantProperties = new List <XName>() { MetadataExtension.xNS.GetName("CompanyID"), MetadataExtension.xNS.GetName("ContactID") }; store.Promote("Metadata", variantProperties, null); InstanceHandle handle = store.CreateInstanceHandle(null); var cmd = new CreateWorkflowOwnerCommand { InstanceOwnerMetadata = { { workflowHostTypePropertyName, new InstanceValue(wfHostTypeName) } } }; InstanceOwner owner = store.Execute(handle, cmd, TimeSpan.MaxValue).InstanceOwner; store.DefaultInstanceOwner = owner; handle.Free(); _wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e) { return(PersistableIdleAction.Persist); }; _wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e) { if (System.Diagnostics.Debugger.IsAttached) { foreach (var item in e.Outputs) { System.Diagnostics.Debug.WriteLine("Variable:{0} has value: {1}", item.Key, item.Value); } } }; var trackingParticipant = new TrackingHelper.DebugTrackingParticipant { TrackingProfile = TrackingHelper.SimpleProfile }; _wfApp.Extensions.Add(trackingParticipant); }