Share via


在工作流程使用本機服務

Windows Workflow Foundation 支援工作流程裝載環境中的本機通訊服務,並且會使用 Web 服務在工作流程之間通訊。 如需使用 Web 服務之工作流程通訊的詳細資訊,請參閱與其他工作流程通訊

Windows Workflow Foundation 工作流程通訊服務會對做為方法呼叫和事件處理常式的工作流程寫入器公開使用者定義的服務類別,以簡化傳出和傳入訊息交換的模型建立。 單一服務類別執行個體對多個工作流程執行個體的多工允許主機寫入器在引發事件時針對特定工作流程執行個體時,根據單一位置或傳出訊息設計程式。

下列圖表顯示本機通訊服務如何與其主應用程式通訊。

本機主機通訊

工作流程執行個體上的 HandleExternalEventActivityCallExternalMethodActivity 活動會與事件和方法互動,這些事件和活動是在自訂介面中宣告並實作在自訂本機服務中。 HandleExternalEventActivity 活動會回應由主應用程式引發和本機服務實作的特定事件。 CallExternalMethodActivity 會在本機服務上叫用方法。 如需如何使用 HandleExternalEventActivityCallExternalMethodActivity 的詳細資訊,請參閱使用 HandleExternalEventActivity 活動使用 CallExternalMethodActivity 活動

工作流程通訊服務

Windows Workflow Foundation 工作流程通訊服務會為物件實作簡易機制,以便與工作流程執行個體通訊。 通訊通道的定義是介面,而且其實作是新增至執行階段的服務類別,可以協助通訊。

對於服務類別而言,工作流程的行為就像任何其他類別,而且您透過引發事件和接收方法呼叫來和它通訊。 對於工作流程而言,通訊介面顯示為包含傳入事件接收和傳出作業方法叫用的通道。

介面上的外部方法宣告由 ExternalDataExchangeService 轉換至服務物件上的方法呼叫。 我們提到的類別做為引發事件的本機服務,由工作流程執行階段引擎攔截,並且以工作流程的傳入訊息來傳遞。

下列程式碼範例顯示如何定義本機工作流程通訊介面的範例。

[ExternalDataExchange]
public interface ICommunicationService
{
    void HelloHost(string message);
    event EventHandler<ExternalDataEventArgs> HelloWorkflow;
}

服務類別

服務類別實作用於定義與工作流程通訊的介面。 介面上的所有事件都是單向的,也就是沒有 refout 參數,也沒有傳回值。 但對於傳出的要求而言,介面上的方法可以有 refout 參數與傳回值。

通訊模型是多對一。使用此單一服務物件可以在很多對話上攜帶很多工作流程執行個體中的每一個。 這表示來自所有工作流程的對特定方法 m 的所有傳出由相同物件的相同 m 服務。

相反地,所有傳入呼叫必須明確導向至正確的工作流程執行個體和對話。 Windows Workflow Foundation 提供機制給 m 以分辨傳出呼叫的工作流程執行個體和對話。 使用這兩段資訊後,物件可以將回應導回正確的工作流程執行個體上的正確對話。

Windows Workflow Foundation 在傳出呼叫執行緒上的 System.Workflow.Runtime.WorkflowEnvironment.WorkflowInstanceId 中提供呼叫工作流程的執行個體識別碼。

下列程式碼範例說明通訊服務的實作。

public class CommunicationService : ICommunicationService 
{
    public event EventHandler<ExternalDataEventArgs> HelloWorkflow;

    public void HelloHost(string message)
    {
        Console.WriteLine("This is the message: {0}", message);

        // Raise the HelloWorkflow event.
        HelloWorkflow(null, new ExternalDataEventArgs(WorkflowEnvironment.WorkflowInstanceId));
    }
}

在您啟動工作流程的執行個體之前,您必須將 ExternalDataExchangeService 新增至工作流程執行個體引擎,然後新增您的自訂通訊服務至 ExternalDataExchangeService,如下列程式碼範例所示。

ExternalDataExchangeService externalService = new ExternalDataExchangeService();
workflowRuntime.AddService(externalService);
externalService.AddService(new CommunicationService());

若要查看具有本機服務的主機通訊範例,請參閱 HostCommunication Sample

請參閱

參考

HandleExternalEventActivity
CallExternalMethodActivity

概念

使用 HandleExternalEventActivity 活動
使用 CallExternalMethodActivity 活動
與其他工作流程通訊
工作流程與應用程式通訊

其他資源

HostCommunication Sample

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.