WorkflowHostingEndpoint 類別

定義

ServiceEndpoint 的抽象實作。 從這個類別衍生,以公開支援建立工作流程與繼續書籤的合約。

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
繼承
WorkflowHostingEndpoint
衍生

範例

下列範例將示範如何從 WorkflowHostingEndpoint 類別衍生類別。

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

建構函式

WorkflowHostingEndpoint(Type)

使用指定的合約型別,建立 WorkflowHostingEndpoint 類別的新執行個體。

WorkflowHostingEndpoint(Type, Binding, EndpointAddress)

使用指定的合約型別、繫結與端點位址,建立 WorkflowHostingEndpoint 類別的新執行個體。

屬性

Address

取得或設定服務端點的端點位址。

(繼承來源 ServiceEndpoint)
Behaviors

取得服務端點的行為。

(繼承來源 ServiceEndpoint)
Binding

取得或設定服務端點的繫結。

(繼承來源 ServiceEndpoint)
Contract

取得服務端點的合約。

(繼承來源 ServiceEndpoint)
CorrelationQueries

取得 CorrelationQuery 執行個體的集合。

EndpointBehaviors

取得服務的端點行為。

(繼承來源 ServiceEndpoint)
IsSystemEndpoint

取得或設定服務端點是否由系統產生,而非由使用者定義。

(繼承來源 ServiceEndpoint)
ListenUri

取得或設定服務端點接聽的 URI。

(繼承來源 ServiceEndpoint)
ListenUriMode

取得或設定傳輸如何處理提供給服務接聽的 URI。

(繼承來源 ServiceEndpoint)
Name

取得或設定服務端點的名稱。

(繼承來源 ServiceEndpoint)

方法

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
OnGetCreationContext(Object[], OperationContext, Guid, WorkflowHostingResponseContext)

覆寫以建立新的 WorkflowCreationContext 執行個體。

OnGetInstanceId(Object[], OperationContext)

覆寫以傳回所建立之工作流程執行個體的執行個體識別碼。

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

覆寫以傳回要在工作流程執行個體上繼續的書籤。

ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

適用於