WorkflowHostingEndpoint Class

WorkflowHostingEndpoint Class

.NET Framework (current version)
 

An abstract implementation of ServiceEndpoint. Derive from this class to expose contracts that support workflow creation and bookmark resumption.

Namespace:   System.ServiceModel.Activities
Assembly:  System.ServiceModel.Activities (in System.ServiceModel.Activities.dll)


public abstract class WorkflowHostingEndpoint : ServiceEndpoint

NameDescription
System_CAPS_protmethodWorkflowHostingEndpoint(Type)

Creates a new instance of the WorkflowHostingEndpoint class with the specified contract type.

System_CAPS_protmethodWorkflowHostingEndpoint(Type, Binding, EndpointAddress)

Creates a new instance of the WorkflowHostingEndpoint class with the specified contract type, binding, and endpoint address.

NameDescription
System_CAPS_pubpropertyAddress

Gets or sets the endpoint address for the service endpoint.(Inherited from ServiceEndpoint.)

System_CAPS_pubpropertyBehaviors

Gets the behaviors for the service endpoint.(Inherited from ServiceEndpoint.)

System_CAPS_pubpropertyBinding

Gets or sets the binding for the service endpoint.(Inherited from ServiceEndpoint.)

System_CAPS_pubpropertyContract

Gets the contract for the service endpoint.(Inherited from ServiceEndpoint.)

System_CAPS_pubpropertyCorrelationQueries

Gets a collection of CorrelationQuery instances .

System_CAPS_pubpropertyEndpointBehaviors

Gets the endpoint behaviors for the service.(Inherited from ServiceEndpoint.)

System_CAPS_pubpropertyIsSystemEndpoint

Gets or sets whether the service endpoint is generated by the system as opposed to being user-defined.(Inherited from ServiceEndpoint.)

System_CAPS_pubpropertyListenUri

Gets or sets the URI at which the service endpoint listens.(Inherited from ServiceEndpoint.)

System_CAPS_pubpropertyListenUriMode

Gets or sets how the transport handles the URI that is provided for the service to listen on.(Inherited from ServiceEndpoint.)

System_CAPS_pubpropertyName

Gets or sets the name of the service endpoint.(Inherited from ServiceEndpoint.)

NameDescription
System_CAPS_pubmethodEquals(Object)

Determines whether the specified object is equal to the current object.(Inherited from Object.)

System_CAPS_protmethodFinalize()

Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.(Inherited from Object.)

System_CAPS_pubmethodGetHashCode()

Serves as the default hash function. (Inherited from Object.)

System_CAPS_pubmethodGetType()

Gets the Type of the current instance.(Inherited from Object.)

System_CAPS_protmethodMemberwiseClone()

Creates a shallow copy of the current Object.(Inherited from Object.)

System_CAPS_protmethodOnGetCreationContext(Object[], OperationContext, Guid, WorkflowHostingResponseContext)

Override to create a newWorkflowCreationContext instance.

System_CAPS_protmethodOnGetInstanceId(Object[], OperationContext)

Override to return the instance ID for the workflow instance being created.

System_CAPS_protmethodOnResolveBookmark(Object[], OperationContext, WorkflowHostingResponseContext, Object)

Override to return a bookmark to be resumed on the workflow instance.

System_CAPS_pubmethodToString()

Returns a string that represents the current object.(Inherited from Object.)

The following example shows how to derive a class from the WorkflowHostingEndpoint class.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.ServiceModel;
using System.ServiceModel.Activities;
using System.ServiceModel.Channels;

namespace Microsoft.Samples.WF.CreationEndpoint
{

    public class CreationEndpoint : WorkflowHostingEndpoint
    {
        static Uri defaultBaseUri;

        public CreationEndpoint(Binding binding, EndpointAddress address)
            : base(typeof(IWorkflowCreation), binding, address)
        {
        }

        public CreationEndpoint():this (GetDefaultBinding(), 
                                        new EndpointAddress(new Uri(DefaultBaseUri, new Uri(Guid.NewGuid().ToString(), UriKind.Relative))))
        {
        }

        static Uri DefaultBaseUri
        {
            get
            {
                if (defaultBaseUri == null)
                {                    
                    defaultBaseUri = new Uri(string.Format(CultureInfo.InvariantCulture, "net.pipe://localhost/workflowCreationEndpoint/{0}/{1}",
                        Process.GetCurrentProcess().Id,
                        AppDomain.CurrentDomain.Id));
                }
                return defaultBaseUri;
            }
        }

        //defaults to NetNamedPipeBinding
        public static Binding GetDefaultBinding()
        {
            return new NetNamedPipeBinding(NetNamedPipeSecurityMode.None) { TransactionFlow = true };
        }

        protected override Guid OnGetInstanceId(object[] inputs, OperationContext operationContext)
        {
            //Create was called by client
            if (operationContext.IncomingMessageHeaders.Action.EndsWith("Create"))
            {
                return Guid.Empty;
            }
            //CreateWithInstanceId was called by client
            else if (operationContext.IncomingMessageHeaders.Action.EndsWith("CreateWithInstanceId"))
            {
                return (Guid)inputs[1];
            }
            else
            {
                throw new InvalidOperationException("Invalid Action: " + operationContext.IncomingMessageHeaders.Action);
            }
        }

        protected override WorkflowCreationContext OnGetCreationContext(object[] inputs, OperationContext operationContext, Guid instanceId, WorkflowHostingResponseContext responseContext)
        {
            WorkflowCreationContext creationContext = new WorkflowCreationContext();
            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)
                    {
                        //arguments to pass to the workflow
                        creationContext.WorkflowArguments.Add(pair.Key, pair.Value);
                    }
                }
                //reply to client with instanceId
                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)
                    {
                        //arguments to pass to workflow
                        creationContext.WorkflowArguments.Add(pair.Key, pair.Value);
                    }
                }
            }
            else
            {
                throw new InvalidOperationException("Invalid Action: " + operationContext.IncomingMessageHeaders.Action);
            }
            return creationContext;
        }
    }

    //service contract exposed from the endpoint
    [ServiceContract(Name = "IWorkflowCreation")]
    public interface IWorkflowCreation
    {
        [OperationContract(Name = "Create")]
        Guid Create(IDictionary<string, object> inputs);

        [OperationContract(Name = "CreateWithInstanceId", IsOneWay=true)]
        void CreateWithInstanceId(IDictionary<string, object> inputs, Guid instanceId);
    }
}

.NET Framework
Available since 4.0

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Return to top
Show:
© 2016 Microsoft