共用方式為


使用 SendActivity 活動

SendActivity 活動可用於建立在合約上定義的用戶端同步作業叫用的模型,該合約由使用 Windows Communication Foundation (WCF) 的服務實作。

產生服務合約的程式碼

若要使用工作流程內的 SendActivity 活動,您需要合約介面和與那些合約關聯之端點的用戶端組態。 要達成這個工作的一個方法就是使用 Svcutil.exe 命令列工具。 例如,如果使用在 http://localhost:8888/MyService.svc 的可探索端點執行服務,您可以使用下列語法產生 SendActivity 活動所需的必要程式碼:

svcutil.exe http://localhost:8888/MyService.svc

Svcutil.exe 工具將產生您可以在應用程式中使用的應用程式組態檔,該應用程式定義使用服務所需的特定端點和繫結。 產生的第二個檔案包括 Proxy 類別與實際的合約介面。 合約定義是服務探索的 SendActivity 活動所需。 這兩個檔案應該新增至您的工作流程專案中,使 SendActivity 活動可以使用在它們之中的資訊。

如果您可以存取合約介面,您不需使用 Svcutil.exe 工具,即可直接將它們新增至您的專案中,請確定也在應用程式組態檔中新增適當的用戶端端點組態。

叫用服務方法

SendActivity 活動需要某些資訊,才能成功連線並叫用服務合約上的作業:ChannelToken 與作業資訊。

指定 SendActivity 活動的 ChannelToken

WCF 端點包含有關合約名稱、合約繫結、安全性資訊和位址的資訊。 在您的應用程式組態檔中輸入,並使用上一節提到的 Svcutil.exe 工具來產生這項資訊。 例如,用於接聽 http://localhost:8888/MyService.svc 位址之服務的應用程式組態檔內的用戶端節點會顯示如下所示:

<client>
    <endpoint address="http://localhost:8888/MyService.svc"
        binding="customBinding" bindingConfiguration="WSHttpContextBinding_MyServiceContract"
        contract="MyService.localhost.MyServiceContract"
        name="WSHttpContextBinding_MyServiceContract">
        <identity>
            <userPrincipalName value="someone@example.com" />
        </identity>
    </endpoint>
</client>

建立 SendActivity 活動時,設定 System.Workflow.Activities.ChannelToken.Name 來建立指定通道名稱、設定 System.Workflow.Activities.ChannelToken.OwnerActivityName 來建立通道範圍,以及設定 ChannelToken 物件的 System.Workflow.Activities.ChannelToken.EndpointName 屬性來建立用戶端端點的 ChannelToken 物件。 然後您可以使用 ChannelToken 屬性來建立 ChannelToken 物件與 SendActivity 執行個體的關聯。 下列程式碼說明如何建立 SendActivity 活動和 ChannelToken 物件,以及如何使用稍早所示的應用程式組態的資訊來建立 ChannelTokenSendActivity 活動的關聯。

SendActivity sendActivity1 = new SendActivity();
ChannelToken channel1 = new ChannelToken();
channel1.EndpointName = "WSHttpContextBinding_MyServiceContract";
channel1.Name = "WSHttpContextBinding_MyServiceContract";
channel1.OwnerActivityName = "Workflow1";
this.sendActivity1.ChannelToken = channel1;
this.sendActivity1.Name = "sendActivity1";

指定 SendActivity 活動的作業資訊

SendActivity 活動呼叫在單一合約內定義的單一作業。 為完成這項工作,SendActivity 使用 TypedOperationInfo 物件,該物件包含合約的資料型別與要叫用之作業名稱的資訊。 TypedOperationInfo 類別的 ContractType 屬性會參考合約介面型別。 藉由 TypedOperationInfo 類別的 Name 屬性參考在該型別內呼叫的作業名稱。

System.Workflow.Activities.TypedOperationInfo typedoperationinfo1 = new System.Workflow.Activities.TypedOperationInfo();
typedoperationinfo1.ContractType = typeof(MyServiceContractClient.localhost.MyServiceContract);
typedoperationinfo1.Name = "DoWork";
typedoperationinfo1.PrincipalPermissionName = "";
typedoperationinfo1.PrincipalPermissionRole = "";
this.sendActivity1.ServiceOperationInfo = typedoperationinfo1;

請參閱

工作

工作 2:建立工作流程服務用戶端

參考

SendActivity
TypedOperationInfo
ServiceOperationInfo
ChannelToken

概念

使用 ReceiveActivity 活動
工作流程服務撰寫樣式

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.