Compartir a través de


Ejemplo de servicio de flujo de trabajo de equipo de estado

Download sample

Este ejemplo muestra cómo crear un servicio del flujo de trabajo mediante un flujo de trabajo de equipo de estado, muestra cómo implementar una calculadora mediante un flujo de trabajo de equipo de estado y muestra un proceso de ejecución prolongada donde el estado está guardado automáticamente. Al reiniciar el servicio del flujo de trabajo, el cliente puede comunicarse con la misma instancia del servicio del flujo de trabajo porque se mantiene el estado del flujo de trabajo. El ejemplo también muestra cómo se pueden exigir los protocolos en la aplicación en el contrato para que el flujo de trabajo produzca una excepción si se llama a una operación en el servicio inesperadamente.

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.

Para obtener más información acerca de que prepara este ejemplo, consulte Procedimiento de instalación único para ejemplos de Windows Communication Foundation.

El servicio implementa el contrato de servicios ICalculator mostrado en el código muestra siguiente.

[ServiceContract(Namespace = "http://Microsoft.WorkflowServices.Samples")]
public interface ICalculator
{
    [OperationContract()]
    int PowerOn();
    [OperationContract()]
    int Add(int value);
    [OperationContract()]
    int Subtract(int value);
    [OperationContract()]
    int Multiply(int value);
    [OperationContract()]
    int Divide(int value);
    [OperationContract()]
    void PowerOff();
}

El ejemplo implementa un conjunto de estados, cada uno de los cuales tiene un conjunto de controladores de eventos. Cada controlador de eventos contiene una actividad Receive que implementa una operación en el contrato ICalculator. Dado que está en un estado determinado, el flujo de trabajo de equipo de estado puede aceptar el conjunto de operaciones que las actividades Receive implementan en ese estado. Esto ayuda a exigir un protocolo en la aplicación.

El archivo Web.config define los enlaces para el servicio y expone dos extremos con dos enlaces diferentes: BasicHttpContextBinding con cookies habilitadas y WSHttpContextBinding para los clientes que no desean utilizar BasicHttpContextBinding. El enlace WSHttpContextBinding ayuda a mantener el contexto que se utiliza para enrutar las solicitudes a una instancia de flujo de trabajo determinada.

Para preparar el servicio en IIS (Servicios de Internet Information Server)

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

  2. En IIS, habilite la autenticación de Windows en el directorio virtual de ServiceModelSamples.

    Para habilitar la autenticación de Windows en IIS 5.1 o 6.0:

    1. Abra una ventana del símbolo del sistema y escriba start inetmgr para abrir el complemento MMC de los Servicios de Internet Information Server (IIS).

    2. Haga clic con el botón secundario en ServiceModelSamples de la raíz virtual dentro de Sitio Web predeterminado, haga clic en Propiedades y, a continuación, haga clic en la ficha Seguridad de directorios.

    3. En Autenticación y control de acceso haga clic en Editar.

    4. En el cuadro de diálogo Métodos de autenticación, seleccione Autenticación de Windows integrada.

    Para habilitar la autenticación de Windows en IIS 7.0:

    1. Abra una ventana del símbolo del sistema y escriba start inetmgr para abrir el complemento MMC de los Servicios de Internet Information Server (IIS).

    2. Seleccione la raíz virtual de ServiceModelSamples dentro de Sitio Web predeterminado.

    3. Dentro del panel de inicio de ServiceModelSamples, haga doble clic en Autenticación dentro del grupo IIS.

    4. Seleccione Autenticación de Windows y seleccione la acción Habilitar.

  3. Genere el proyecto. El proyecto genera y actualiza ServiceModelSamples.

  4. Para permitir el acceso al almacén duradero:

    1. Ejecute el script CreateStores.cmd situado en el tema Procedimiento de instalación único para ejemplos de Windows Communication Foundation. Este ejemplo utiliza la base de datos NetFx35Samples_ServiceWorkflowStore.

    2. Convierta la cuenta de usuario de ASP.NET en un miembro del grupo de usuarios de SQL Server.

  5. Para asegurarse de que el servicio se ha instalado correctamente, señale en el explorador la dirección https://localhost/ ServiceModelSamples /service.svc. Debería ver la página de ayuda del servicio. Para consultar el Lenguaje de descripción de servicios web (WSDL), escriba https://localhost/ServiceModelSamples/service.svc? wsdl.

  6. Para ejecutar este ejemplo, debe utilizar Ejemplo de cliente calculadora. Es una interfaz de usuario de la calculadora creada mediante , que actúa como un cliente para el servicio. Puede utilizar extremos diferentes que se corresponden con los enlaces que el servicio proporciona. Para cambiar los enlaces haga clic en el icono del menú Extremo y seleccione el enlace adecuado, bien sea BasicHtttpContextBinding o WSHttpContextBinding.

  7. Para probar la naturaleza duradera del servicio, cierre el cliente y vuélvalo a abrir mientras el cliente de la calculadora se está ejecutando. El cliente de la calculadora se comunica de nuevo con la misma instancia del servicio y muestra el id. de la instancia en la parte inferior. El cliente de la calculadora utiliza un archivo de texto llamado Client.ctx para almacenar el contexto en un lugar duradero la primera vez que se realiza una llamada (en este caso, el directorio \bin de su ejemplo). Al volver a abrir el cliente, compruebe si el archivo está presente. Si el archivo de texto está presente, aplique el contexto almacenado al canal que se crea. Si el servicio del flujo de trabajo ha finalizado y abre el cliente con el archivo Client.ctx aún en su directorio \bin, éste intenta aplicar el contexto al canal. Recibe un error porque la instancia de flujo de trabajo con la que desea comunicarse no está allí. Elimine el archivo y vuelva a intentarlo.

  8. También puede reciclar el servicio del flujo de trabajo reiniciando IIS. Dado que está utilizando un almacén de persistencia después de cada operación, se almacena el estado del servicio. Por consiguiente, al intentar comunicarse con el servicio desde el cliente después de que se haya reiniciado IIS, la infraestructura del flujo de trabajo recibe la instancia de flujo de trabajo desde el almacén de persistencia y puede comunicarse con la misma instancia.

    Nota

    Al invocar por primera vez una operación después de reiniciar IIS, recibe una excepción MessageSecurityException, que se produce por un token de seguridad caducado en el canal. Invoque otra operación y se realizará correctamente.

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.