protected override WorkflowCreationContext OnGetCreationContext(object[] inputs, OperationContext operationContext, Guid instanceId, WorkflowHostingResponseContext responseContext) { WorkflowCreationContext creationContext = new WorkflowCreationContext(); creationContext.CreateOnly = true; if (operationContext.IncomingMessageHeaders.Action.EndsWith("Create")) { Dictionary <string, object> arguments = (Dictionary <string, object>)inputs[0]; if (arguments != null && arguments.Count > 0) { foreach (KeyValuePair <string, object> pair in arguments) { creationContext.WorkflowArguments.Add(pair.Key, pair.Value); } } responseContext.SendResponse(instanceId, null); } else if (operationContext.IncomingMessageHeaders.Action.EndsWith("CreateWithInstanceId")) { Dictionary <string, object> arguments = (Dictionary <string, object>)inputs[0]; if (arguments != null && arguments.Count > 0) { foreach (KeyValuePair <string, object> pair in arguments) { creationContext.WorkflowArguments.Add(pair.Key, pair.Value); } } } else { throw new InvalidOperationException("Invalid Action: " + operationContext.IncomingMessageHeaders.Action); } return(creationContext); }
public WorkflowServiceInstance GetInstance(WorkflowGetInstanceContext parameters) { if ((this.workflowInstance == null) && (parameters != null)) { lock (base.ThisLock) { base.ThrowIfDisposedOrNotOpen(); if (this.workflowInstance == null) { try { WorkflowServiceInstance instance; if (parameters.WorkflowHostingEndpoint != null) { WorkflowHostingResponseContext responseContext = new WorkflowHostingResponseContext(); WorkflowCreationContext creationContext = parameters.WorkflowHostingEndpoint.OnGetCreationContext(parameters.Inputs, parameters.OperationContext, this.InstanceId, responseContext); if (creationContext == null) { throw System.ServiceModel.Activities.FxTrace.Exception.AsError(WorkflowHostingEndpoint.CreateDispatchFaultException()); } instance = this.directory.InitializeInstance(this.InstanceId, this, null, creationContext); parameters.WorkflowCreationContext = creationContext; parameters.WorkflowHostingResponseContext = responseContext; } else { instance = this.directory.InitializeInstance(this.InstanceId, this, null, null); } this.workflowInstance = instance; } finally { if (this.workflowInstance == null) { base.Fault(); } } } } } return(this.workflowInstance); }
public WorkflowServiceInstance InitializeInstance(Guid instanceId, PersistenceContext context, WorkflowIdentity definitionIdentity, WorkflowIdentityKey updatedIdentity, IDictionary<XName, InstanceValue> instance, WorkflowCreationContext creationContext) { Activity workflowDefinition = null; DynamicUpdateMap updateMap = null; if (updatedIdentity != null && !object.Equals(updatedIdentity.Identity, definitionIdentity)) { if (!this.workflowDefinitionProvider.TryGetDefinitionAndMap(definitionIdentity, updatedIdentity.Identity, out workflowDefinition, out updateMap)) { if (this.workflowDefinitionProvider.TryGetDefinition(updatedIdentity.Identity, out workflowDefinition)) { throw FxTrace.Exception.AsError(new FaultException( OperationExecutionFault.CreateUpdateFailedFault(SR.UpdateMapNotFound(definitionIdentity, updatedIdentity.Identity)))); } else { throw FxTrace.Exception.AsError(new FaultException( OperationExecutionFault.CreateUpdateFailedFault(SR.UpdateDefinitionNotFound(updatedIdentity.Identity)))); } } } else if (!this.workflowDefinitionProvider.TryGetDefinition(definitionIdentity, out workflowDefinition)) { throw FxTrace.Exception.AsError(new VersionMismatchException(SR.WorkflowServiceDefinitionIdentityNotMatched(definitionIdentity), null, definitionIdentity)); } WorkflowIdentity definitionToLoad = updatedIdentity == null ? definitionIdentity : updatedIdentity.Identity; return WorkflowServiceInstance.InitializeInstance(context, instanceId, workflowDefinition, definitionToLoad, instance, creationContext, WorkflowSynchronizationContext.Instance, this.serviceHost, updateMap); }
public WorkflowServiceInstance InitializeInstance(Guid instanceId, PersistenceContext context, IDictionary<XName, InstanceValue> instance, WorkflowCreationContext creationContext) { Activity workflowDefinition = null; this.workflowDefinitionProvider.TryGetDefinition(this.workflowDefinitionProvider.DefaultDefinitionIdentity, out workflowDefinition); Fx.Assert(workflowDefinition != null, "Default definition shouldn't be null."); return WorkflowServiceInstance.InitializeInstance(context, instanceId, workflowDefinition, this.workflowDefinitionProvider.DefaultDefinitionIdentity, instance, creationContext, WorkflowSynchronizationContext.Instance, this.serviceHost); }
public WorkflowServiceInstance InitializeInstance(Guid instanceId, PersistenceContext context, IDictionary <XName, InstanceValue> instance, WorkflowCreationContext creationContext) { return(WorkflowServiceInstance.InitializeInstance(context, instanceId, this.workflowDefinition, instance, creationContext, WorkflowSynchronizationContext.Instance, this.serviceHost)); }