Compartir a través de


Ejemplo de servicio de flujo de trabajo secuencial

Download sample

Este ejemplo muestra cómo crear un servicio de flujo de trabajo mediante un flujo de trabajo secuencial. Este ejemplo muestra cómo crear un contrato de servicios in situ, un método de creación de servicio que se conoce como el modo Workflow First. El ejemplo crea un contrato ICalculator y se implementa en el flujo de trabajo cuando el flujo de trabajo se está generando.

Nota

Para generar y ejecutar este ejemplo, es necesario que esté instalado .NET Framework versión 3.5. Para abrir los archivos de solución y proyecto se necesita Visual Studio 2008.

Implementar la calculadora como un flujo de trabajo incluye las ventajas siguientes:

  • Puede iniciar un proceso de ejecución prolongada que automáticamente guarda el estado del flujo de trabajo. Esto significa que al reiniciar el servicio del flujo de trabajo, el cliente puede comunicar con la misma instancia del servicio.

  • El protocolo del nivel de la aplicación se exige en el contrato. Si se llama a una operación inesperadamente en este servicio, el flujo de trabajo produce una excepción.

Ejemplo de servicios de flujo de trabajo secuencial

En este flujo de trabajo, la actividad Receive PowerOn tiene una propiedad denominada CanCreateInstance, que se marca true. Esto significa que se crea una instancia de este servicio cuando el cliente llama a la operación PowerOn. El cliente recibe el contexto como parte de la respuesta para esta operación. De ahí en adelante, se puede llamar a cualquiera de las otras operaciones en el flujo de trabajo. Para cada operación que el cliente llama, se envía el contexto en el canal y, de este modo, la operación se puede enrutar a la instancia correcta. Cuando se llama a la operación PowerOff, se establece un valor booleano que hace que el flujo de trabajo salga del bucle while.

La muestra del código siguiente muestra el modelo de invocación WorkflowServiceHost que se implementa en el archivo Program.cs en el proyecto de servicio.

WorkflowServiceHost workflowHost = new WorkflowServiceHost(typeof(Microsoft.WorkflowServices.Samples.SequentialCalculatorService));
workflowHost.Open();

En el código muestra anterior, el constructor para WorkflowServiceHost toma el tipo de flujo de trabajo como entrada y lo abre para realizar escuchas para los mensajes.

Este ejemplo también contiene una aplicación cliente que invoca las operaciones en el servicio de la calculadora. La aplicación cliente es un flujo de trabajo secuencial y realiza una serie de invocaciones de la operación. El flujo de trabajo del cliente utiliza las actividades Send para invocar las operaciones en el flujo de trabajo. El proyecto de cliente contiene las referencias al servicio ICalculator que la actividad Send puede utilizar para mostrar la interfaz, de la que se pueden seleccionar las operaciones adecuadas que deben invocarse.

Para configurar, generar y ejecutar el proyecto

  1. Realice las instrucciones de instalación enumeradas en Procedimiento de instalación único para ejemplos de Windows Communication Foundation.

  2. Para instalar los proveedores de persistencia, ejecute el script CreateStores.cmd situado en el tema Procedimiento de instalación único para ejemplos de Windows Communication Foundation.

  3. Este ejemplo utiliza la base de datos NetFx35Samples_ServiceWorkflowStore. No incluye un almacén de persistencia para el flujo de trabajo del cliente. Este ejemplo supone que está utilizando SQL Server Express, donde instala las bases de datos. Si prefiere instalar las bases de datos en SQL Server, cambie las cadenas de conexión en el archivo App.config.

  4. Si no desea utilizar los proveedores de persistencia, entonces, marque con comentarios la sección <WorkflowRuntime> en los archivos App.config.

  5. Ejecute el ejemplo como un usuario desde el grupo Administradores. Si está utilizando Windows Vista, haga clic con el botón secundario en el archivo ejecutable del cliente y, a continuación, haga clic en Ejecutar como administrador.

  6. Cuando la aplicación comienza a ejecutarse, el flujo de trabajo del cliente envía un conjunto de operaciones de la calculadora y, a continuación, completa el flujo de trabajo. Puede presionar ENTRAR para enviar otro conjunto de operaciones de la calculadora.

  7. Para probar la naturaleza de ejecución prolongada de este servicio, coloque un punto de interrupción en la aplicación cliente. Al llegar al punto de interrupción en Visual Studio, cierre y, a continuación, reinicie la aplicación de servicio. Libere el punto de interrupción en el cliente. El flujo de trabajo del cliente habla con la misma instancia de flujo de trabajo en el servicio. También puede que desee partir el ejemplo en dos soluciones para probar el reciclaje del servicio.

Para ejecutar el ejemplo en equipos independientes

  1. Modifique los archivos de configuración para el servicio y el cliente, asegurándose de que cambia el nombre del servidor en la dirección del extremo. Cambie el nombre del servidor de localhost al nombre de equipo en el que estará ejecutando el servicio.

  2. El servicio utiliza el puerto 8888, por lo cual, debe abrir este puerto en el firewall. En el Panel de control de Windows, haga clic en Firewall de Windows. Haga clic en Agregar puerto y, a continuación, agregue el puerto 8888. De forma alternativa, puede ejecutar el servicio en el puerto predeterminado. Para esto, quite : 8888 de la dirección del extremo

  3. Modifique el archivo de configuración del cliente y agregue el elemento siguiente como un elemento secundario del elemento <endpoint>:

    <identity>
        <UserPrincipalName value=”*@<Domain Name in which your server is running” />
    </identity>
    

    Para determinar el nombre de dominio, inicie el servicio en el equipo en el que piensa ejecutarlo. En una ventana del símbolo del sistema en el otro equipo, ejecute el comando siguiente:

    svcutil.exe http://<serverName>:8888/servicehost/Calculator.svc

    Este comando genera un archivo .cs y un archivo output.config. En el elemento <endpoint> del archivo de configuración, copie el elemento <identity> a su archivo de configuración del cliente.

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.