Uso de la actividad ReceiveActivity

La actividad ReceiveActivity está diseñada para implementar una operación de contrato de servicio dentro de un flujo de trabajo. En un contrato de servicio, la actividad ReceiveActivity esperará hasta que un cliente se conecte al servicio y ejecutará sus actividades secundarias contenidas.

La actividad ReceiveActivity tiene la capacidad de implementar una operación de contrato de servicio que ya se ha definido mediante Windows Communication Foundation (WCF) (contrato primero) o puede generar el contrato de servicio mediante las clases (flujo de trabajo primero) de Windows Workflow Foundation. Para obtener más información acerca de los diferentes estilos de creación de servicio de flujo de trabajo, consulte Estilos de creación de servicio de flujo de trabajo.

Implementación de un contrato de servicio mediante la actividad ReceiveActivity

Cuando la actividad ReceiveActivity se programa para ejecutarse, realizará escuchas en busca de una conexión entrante de un cliente en un extremo de servicio. La actividad ReceiveActivity puede implementar sólo una operación única definida en un contrato de servicio. La operación está asociada a una actividad ReceiveActivity mediante un objeto TypedOperationInfo. La clase TypedOperationInfo incluye información acerca de ContractType y el nombre de la operación, así como información de identidad que el cliente necesita para ejecutar correctamente la operación. El ejemplo siguiente muestra cómo crear una actividad ReceiveActivity y asociar un objeto TypedOperationInfo para implementar una operación definida en un contrato de servicio. El contrato de servicio es el mismo contrato mostrado en la sección anterior.

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;

Una operación puede admitir cualquier número de parámetros, así como un valor devuelto. Para admitir esto, la actividad ReceiveActivity utiliza el mecanismo de enlace de parámetro de Windows Workflow Foundation a través de su propiedad ParameterBindings. El ejemplo siguiente muestra cómo usar un enlace de parámetro para asociar una propiedad de clase de flujo de trabajo al valor devuelto de la operación mostrada anteriormente en el contrato. En este ejemplo, un objeto ActivityBind se crea mediante la propiedad de cadena ReturnValue definida en una implementación de clase de servicio de flujo de trabajo. Entonces se crea un WorkflowParameterBinding y se asocia al objeto ActivityBind mediante el método SetBinding. Finalmente, el enlace de parámetro se asocia a la actividad ReceiveActivity agregándolo a la colección ParameterBindings.

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);

Creación de enlaces de servicio y extremos

Para que un cliente se pueda conectar a un servicio de flujo de trabajo, se tiene que configurar un extremo mediante la dirección, el enlace e información de tipo de contrato. Esto se puede lograr mediante un archivo de configuración de la aplicación. Además de la información del extremo, también se pueden usar comportamientos específicos que muestra un servicio. Para el contrato que se usa en este tema, el archivo App.config mostrado abajo permitirá a los clientes conectarse al servicio para intercambiar información, así como descargar información del contrato sobre el propio servicio.

<?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>

Hay ciertos escenarios avanzados en los que se puede usar la actividad ReceiveActivity. Para examinar Para obtener más información, consulte Conversaciones con servicios de flujo de trabajo.

Consulte también

Referencia

ReceiveActivity
ServiceContractAttribute
OperationContractAttribute
TypedOperationInfo
ActivityBind
WorkflowParameterBinding
ParameterBindings

Conceptos

Estilos de creación de servicio de flujo de trabajo

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.