Estilos de creación de servicio de flujo de trabajo

Windows Workflow Foundation admite la capacidad de conectarse a y de intercambiar información de un servicio existente basándose en la información de contrato recibida durante el tiempo de diseño mediante una herramienta de detección de servicio como Svcutil.exe. Sin embargo, Windows Workflow Foundation también admite la capacidad de generar una definición e implementación del contrato de servicio mediante las nuevas clases de Windows Workflow Foundation diseñadas específicamente para crear servicios basados en comunicación.

Servicios de flujo de trabajo de contrato primero

Un servicio de flujo de trabajo de contrato primero es un flujo de trabajo que usa información de contrato de servicio ya existente. Debería asegurarse de que el contrato está disponible y de que esté incluido en su proyecto de servicio del flujo de trabajo. Una vez creada esta información de contrato, la actividad ReceiveActivity proporcionada por Windows Workflow Foundation se puede usar para implementar una operación de contrato de servicio concreta.

Se exige una actividad SendActivity para consumir un servicio en el flujo de trabajo, y una actividad SendActivity requiere un contrato de servicio preexistente. No hay ninguna disposición dentro de Windows Workflow Foundation que le permita crear un contrato de servicio y llamar a un servicio mediante ese contrato dentro del mismo proyecto.

Definición de un servicio de contrato en un proyecto de flujo de trabajo

Puede definir una interfaz de contrato de servicio dentro de su proyecto de flujo de trabajo e implementar una operación de ese contrato mediante la actividad ReceiveActivity. El ejemplo siguiente muestra cómo definir un contrato de servicio mediante ServiceContractAttribute para el contrato y OperationContractAttribute para cada operación admitida por ese contrato.

using System;
using System.ServiceModel;

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

Una actividad ReceiveActivity puede usar la definición de servicio mostrada arriba para implementar, por ejemplo, la operación DoWork definida en este contrato. Además, cada actividad ReceiveActivity puede implementar sólo una operación única para un contrato.

Servicios de flujo de trabajo de flujo de trabajo primero

En la sección anterior se define un servicio de contrato primero como un servicio de flujo de trabajo que implementa una o varias operaciones para un contrato de servicio ya preexistente.

Windows Workflow Foundation también admite la capacidad de definir un contrato de servicio programáticamente mediante las clases de Windows Workflow Foundation. Sin embargo, al igual que en un servicio de contrato primero, una actividad SendActivity no puede crear su propio contrato de servicio para comunicarse con un servicio externo. La actividad ReceiveActivity utiliza este comportamiento para implementar una operación definida por un contrato de servicio.

La clase OperationInfo en Windows Workflow Foundation se puede utilizar para definir un servicio de flujo de trabajo. La propia información del contrato se define mediante la propiedad ContractName y el nombre de la operación se establece mediante el parámetro Name. Si la operación admite parámetros, incluso un valor devuelto, use la clase OperationParameterInfo y agregue cada parámetro a la colección de parámetros del objeto OperationInfo.

Nota

Para los valores devueltos, use el valor "(ReturnValue)" para la propiedad Name y el valor -1 para la propiedad Position del objeto OperationParameterInfo que está creando.

El ejemplo siguiente muestra cómo crear un servicio de flujo de trabajo de flujo de trabajo primero mediante las clases OperationInfo y OperationParameterInfo. El contrato de servicio se denomina WorkflowFirstContract y contiene una operación única denominada 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);

Consulte también

Referencia

ServiceContractAttribute
ReceiveActivity
SendActivity
OperationInfo

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.