共用方式為


在工作流程中使用相互關聯

Windows Workflow Foundation 執行階段引擎使用相互關聯將傳入訊息與工作流程執行個體中特定的 HandleExternalEventActivity 活動對應。 當工作流程執行個體 InstanceId 傳遞至 ExternalDataEventArgs 建構函式時,即完成對執行個體的對應。

您會透過使用介面屬性來定義相互關聯。 Windows Workflow Foundation 工作流程通訊服務介面可以指定相互關聯的額外中繼資料。 要與工作流程執行個體的事件活動相互關聯時,需要這個相互關聯資料。 相互關聯中繼資料的指定是採取介面上屬性的形式,也就是 CorrelationParameterAttribute 屬性。

注意

可選擇性提供通訊介面的相互關聯屬性。 根據預設,通訊介面沒有相互關聯。 如果使用者需要透過相互關聯將訊息傳遞至特定的活動執行個體,才需要新增相互關聯屬性。

介面屬性

下表說明一組完整的介面屬性,這些屬性可用於由 Windows Workflow Foundation 工作流程通訊服務所使用的介面定義中。

屬性 描述

CorrelationParameterAttribute

用於指定參數的名稱,此名稱會用於介面所定義的方法和事件中,也會用於相互關聯。 如果方法或事件包含符合名稱的型式參數,則該參數會在該方法或事件上定義相互關聯值。 如果方法或事件沒有這類參數,則方法或事件可以使用 CorrelationAliasAttribute 來定義相互關聯值的位置。 這個屬性會在介面上出現多次。

CorrelationInitializerAttribute

用於方法或事件上,以指示當叫用方法或引發事件時,會初始化相互關聯參數的值。 對於指定的 CorrelationToken,必須先叫用或接收初始設定式方法或事件,才能執行交談中任何其他的方法或事件。 任何會初始化新交談的方法或事件,也就是新的相互關聯語彙基元,必須以這個屬性標記。 方法或事件必須包含每個相互關聯權杖的適當具名參數或 CorrelationAliasAttribute

CorrelationAliasAttribute

用於方法或事件定義上,以覆寫該成員的 CorrelationParameter 設定。 CorrelationAliasAttribute 屬性會在做為取得相互關聯值之來源的可用參數中指定位置。 字串參數是在型式參數集上用點標記的路徑。 它會指出可找到相符資料值的位置。 如果有定義多個相互關聯語彙基元,則也必須指定語彙基元的 Name 具名參數。

使用相互關聯屬性

CorrelationParameterAttribute 會命名交談識別項,相互關聯。 介面中的每個方法或事件會以該名稱的型式參數宣告,例如 id,如下列 ITaskService 介面程式碼範例所示。 您也可以使用其他屬性來描述更複雜的相互關聯對應。 在得知交談的介面和相互關聯資訊後,此類別會引發其本機服務事件。 它會在呼叫時的參數資料中指定相互關聯。

下列程式碼範例顯示工作流程通訊服務相互關聯的介面定義,ITaskService

    [Serializable]
    public class TaskEventArgs : ExternalDataEventArgs
    {
        private string id;

        public TaskEventArgs(Guid instanceId,string id)
            :base(instanceId)
        {
            this.id = id;
        }

        public string Id
        {
            get { return id; }
            set { id = value; }
        }
    }

    [ExternalDataExchange]
    [CorrelationParameter("taskId")]
    public interface ITaskService
    {
        [CorrelationInitializer]
        void CreateTask(string taskId, string assignee, string text);

        [CorrelationAlias("taskId", "e.Id")]
        event EventHandler<TaskEventArgs> TaskCompleted;
    }

任何開始新交談的作業、方法或事件必須以 CorrelationInitializerAttribute 屬性化。 如果發生呼叫 CorrelationInitializerAttribute 方法 m,則服務類別會知道正在使用這個呼叫初始化新的交談。 工作流程交談存留期是由相互關聯介面存留期來指定。 工作流程可以在交談之間卸載和載入。

下列程式碼範例說明實作 ITaskService 的服務類別。

    public class TaskService : ITaskService
    {
        public void CreateTask(string taskId, string assignee, string text)
        {
            Console.WriteLine("task " + taskId + " created for " + assignee);
        }

        public void RaiseEvent(TaskEventArgs args)
        {
            if (TaskCompleted != null)
                TaskCompleted(null, args);
        }

        public event EventHandler<TaskEventArgs> TaskCompleted;
    }

請參閱

參考

CorrelationParameterAttribute
CorrelationInitializerAttribute
CorrelationParameterAttribute
ExternalDataEventArgs
HandleExternalEventActivity

概念

在工作流程使用本機服務
本機通訊與相互關聯概觀
工作流程與應用程式通訊

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.