工作流服务创作样式

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 对象的参数集合中。

备注

对于返回值,请对 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

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。