共用方式為


工作流程服務撰寫樣式

Windows Workflow Foundation 支援連線至現有服務並與現有服務交換資訊的能力,而現有服務是以在設計階段使用如 Svcutil.exe 等服務探索工具所接收的合約資訊做為基礎。 不過,Windows Workflow Foundation 也支援使用特別為建立通訊服務而設計的 Windows Workflow Foundation 類別來產生服務合約定義和實作的功能。

合約優先工作流程服務

合約優先工作流程服務是一個使用預先存在服務合約資訊的工作流程。 您應該確定合約可供使用,並包括在您的工作流程服務專案中。 建立這項合約資訊之後,就可以使用 Windows Workflow Foundation 提供的 ReceiveActivity 活動來實作特定服務合約作業。

若要在工作流程中取用服務,便需要 SendActivity 活動,而 SendActivity 活動必須有預先存在的服務合約。 在 Windows Workflow Foundation 無法讓您建立服務合約並在相同專案中使用該合約呼叫服務。

定義工作流程專案中的服務合約

您可以在您的工作流程專案內定義服務合約介面,並且使用 ReceiveActivity 活動從該合約實作作業。 下列範例會示範如何使用合約的 ServiceContractAttribute,以及該合約所支援的每個作業之 OperationContractAttribute 來定義服務合約。

using System;
using System.ServiceModel;

namespace Microsoft.WorkflowServices.Samples
{
    [ServiceContract(Namespace = "http://Microsoft.WorkflowServices.Samples")]
    public interface IContractFirstService
    {
        [OperationContract()]
        string DoWork();
    }
}

例如,ReceiveActivity 活動可以使用上述所示的服務定義來實作這個合約中定義的 DoWork 作業。 此外,每個 ReceiveActivity 活動都只能實作合約的單一作業。

工作流程優先工作流程服務

在先前章節中,合約優先服務已定義為會實作預先存在服務合約之作業或數個作業的工作流程服務。

Windows Workflow Foundation 也支援使用 Windows Workflow Foundation 類別並以程式設計方法定義服務合約之功能。 這與合約優先服務相同,只不過 SendActivity 活動無法建立自己的服務合約來與外部服務通訊。 ReceiveActivity 活動會使用這個行為,以實作服務合約所定義的作業。

Windows Workflow Foundation 中的 OperationInfo 類別可用來定義工作流程服務。 合約資訊本身是使用 ContractName 屬性定義,而作業名稱則使用 Name 參數定義。 如果作業支援參數 (包括傳回值),請使用 OperationParameterInfo 類別並將每個參數加入至 OperationInfo 物件的 Parameters 集合。

注意

對於傳回值,請使用 Name 屬性的值 "(ReturnValue)",以及您所要建立的 OperationParameterInfo 物件之 Position 屬性的值 -1。

下列範例會示範如何使用 OperationInfoOperationParameterInfo 類別建立工作流程優先的工作流程服務。 服務合約會命名為 WorkflowFirstContract,而且包含名為 DoWork 的單一作業。

OperationInfo doWorkOperation = new OperationInfo();
OperationParameterInfo returnValueParameter = new OperationParameterInfo();

doWorkOperation.ContractName = "WorkflowFirstContract";
doWorkOperation.Name = "DoWork";
returnValueParameter.Attributes = ((System.Reflection.ParameterAttributes)((System.Reflection.ParameterAttributes.Out | System.Reflection.ParameterAttributes.Retval)));
returnValueParameter.Name = "(ReturnValue)";
returnValueParameter.ParameterType = typeof(string);
returnValueParameter.Position = -1;
doWorkOperation.Parameters.Add(operationparameterinfo1);

請參閱

參考

ServiceContractAttribute
ReceiveActivity
SendActivity
OperationInfo

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.