コード例 #1
0
        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);
        }
コード例 #2
0
 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);
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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));
 }