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: