使用 ReceiveActivity 活动

ReceiveActivity 活动旨在实现工作流中的服务协定操作。在给定服务协定的情况下,ReceiveActivity 活动将一直等待,直到客户端连接到服务为止,然后运行其包含的子活动。

ReceiveActivity 活动可以实现已使用 Windows Communication Foundation (WCF)(协定优先)定义的服务协定操作,也可以使用 Windows Workflow Foundation 类(工作流优先)生成服务协定。有关不同的工作流服务创作样式的更多信息,请参见工作流服务创作样式

使用 ReceiveActivity 活动实现服务协定

在安排 ReceiveActivity 活动运行之后,该活动将侦听来自服务终结点上的客户端的传入连接。ReceiveActivity 活动只能实现服务协定中定义的单个操作。使用 TypedOperationInfo 对象可将该操作与 ReceiveActivity 活动关联。TypedOperationInfo 类包括有关 ContractType 和操作名称的信息,以及客户端要成功运行操作所需的标识信息。下面的示例演示了如何创建 ReceiveActivity 活动和关联 TypedOperationInfo 对象,以便实现服务协定中定义的操作。该服务协定与上一节中所示的服务协定相同。

this.doWorkReceiveActivity = new ReceiveActivity();
TypedOperationInfo doWorkOperationInfo = new TypedOperationInfo();

this.doWorkReceiveActivity.CanCreateInstance = true;
this.doWorkReceiveActivity.Name = "doWorkReceiveActivity";
doWorkOperationInfo.ContractType = typeof(Microsoft.WorkflowServices.Samples.IContractFirstService);
doWorkOperationInfo.Name = "DoWork";
doWorkOperationInfo.PrincipalPermissionRole = "";
this.doWorkReceiveActivity.ServiceOperationInfo = doWorkOperationInfo;

一个操作可以支持任意数量的参数和返回值。为此,ReceiveActivity 活动通过其 ParameterBindings 属性来使用 Windows Workflow Foundation 的参数绑定机制。下面的示例演示了如何使用参数绑定将一个工作流类属性与上面服务协定中所示操作的返回值关联。在此示例中,将使用工作流服务类实现中定义的 ReturnValue 字符串属性来创建 ActivityBind 对象。然后创建 WorkflowParameterBinding,并使用 SetBinding 方法将其与 ActivityBind 对象关联。最后,通过将参数绑定添加到 ParameterBindings 集合中来将该参数绑定与 ReceiveActivity 活动关联。

ActivityBind activitybind1 = new ActivityBind();

activitybind1.Name = "ContractFirstServiceWorkflow";
activitybind1.Path = "ReturnValue";
WorkflowParameterBinding returnValueBinding = new WorkflowParameterBinding();
returnValueBinding.ParameterName = "(ReturnValue)";
returnValueBinding.SetBinding(WorkflowParameterBinding.ValueProperty, ((ActivityBind)(activitybind1)));
this.doWorkReceiveActivity.ParameterBindings.Add(returnValueBinding);

创建服务绑定和终结点

要使客户端连接到工作流服务,需要使用地址、绑定和协定类型信息配置终结点。使用应用程序配置文件可实现此操作。除终结点信息外,还可以使用服务所展示的特定行为。对于本主题中使用的协定,使用下面所示的 App.config 文件可将客户端连接到服务,以便交换信息和下载有关服务自身的协定信息。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.WorkflowServices.Samples.ContractFirstServiceWorkflow" behaviorConfiguration="ServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:8888/ContractFirstService.svc" />
          </baseAddresses>
        </host>
        <endpoint address ="" binding="wsHttpContextBinding" contract="Microsoft.WorkflowServices.Samples.IContractFirstService" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceCredentials>
            <windowsAuthentication
                allowAnonymousLogons="false"
                includeWindowsGroups="true" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

某些高级方案中也可以使用 ReceiveActivity 活动。要了解更多信息,请参见与工作流服务的对话

另请参见

参考

ReceiveActivity
ServiceContractAttribute
OperationContractAttribute
TypedOperationInfo
ActivityBind
WorkflowParameterBinding
ParameterBindings

概念

工作流服务创作样式

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