Edit

Share via


WorkflowHostingEndpoint Class

Definition

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

public ref class WorkflowHostingEndpoint abstract : System::ServiceModel::Description::ServiceEndpoint
public abstract class WorkflowHostingEndpoint : System.ServiceModel.Description.ServiceEndpoint
type WorkflowHostingEndpoint = class
    inherit ServiceEndpoint
Public MustInherit Class WorkflowHostingEndpoint
Inherits ServiceEndpoint
Inheritance
WorkflowHostingEndpoint
Derived

Examples

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);
    }
}

Constructors

WorkflowHostingEndpoint(Type, Binding, EndpointAddress)

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

WorkflowHostingEndpoint(Type)

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

Properties

Address

Gets or sets the endpoint address for the service endpoint.

(Inherited from ServiceEndpoint)
Behaviors

Gets the behaviors for the service endpoint.

(Inherited from ServiceEndpoint)
Binding

Gets or sets the binding for the service endpoint.

(Inherited from ServiceEndpoint)
Contract

Gets the contract for the service endpoint.

(Inherited from ServiceEndpoint)
CorrelationQueries

Gets a collection of CorrelationQuery instances .

EndpointBehaviors

Gets the endpoint behaviors for the service.

(Inherited from ServiceEndpoint)
IsSystemEndpoint

Gets or sets whether the service endpoint is generated by the system as opposed to being user-defined.

(Inherited from ServiceEndpoint)
ListenUri

Gets or sets the URI at which the service endpoint listens.

(Inherited from ServiceEndpoint)
ListenUriMode

Gets or sets how the transport handles the URI that is provided for the service to listen on.

(Inherited from ServiceEndpoint)
Name

Gets or sets the name of the service endpoint.

(Inherited from ServiceEndpoint)

Methods

Equals(Object)

Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode()

Serves as the default hash function.

(Inherited from Object)
GetType()

Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone()

Creates a shallow copy of the current Object.

(Inherited from Object)
OnGetCreationContext(Object[], OperationContext, Guid, WorkflowHostingResponseContext)

Override to create a new WorkflowCreationContext instance.

OnGetInstanceId(Object[], OperationContext)

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

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

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

ToString()

Returns a string that represents the current object.

(Inherited from Object)

Applies to