Share via


Consulta y control de instancias

En este ejemplo se muestra cómo usar los proveedores de consultas y control del almacén de persistencia. El proveedor de consultas expone una API de C# que permite a los usuarios consultar instancias almacenadas en un almacén de persistencia. El proveedor de control expone una API de C# que permite a los usuarios emitir comandos de control (suspend, resume, cancel, terminate y delete) en una instancia almacenada en un almacén de persistencia.

En este ejemplo se incluye un servicio de WF de prueba, una aplicación de consola de Windows para consultar instancias y una aplicación de consola de Windows para controlar instancias.

Nota

Los ejemplos se proporcionan únicamente con fines de aprendizaje. No están concebidos para su uso en un entorno de producción ni se han probado en este tipo de entorno. Microsoft no proporciona asistencia técnica para estos ejemplos.

Requisitos previos

  • Internet Information Services (IIS) versión 7.0

  • Almacén de persistencia inicializado

  • Visual Studio 2010 y Windows Server AppFabric en el mismo equipo

Ubicación y archivos de ejemplo

El documento Léame se encuentra en <ejemplos>\Samples\Hosting\InstanceQueryAndControl.

Todos los archivos necesarios para ejecutar este ejemplo se encuentran en <ejemplos>\Samples\Hosting\InstanceQueryAndControl:

  • En la carpeta InstanceControl se incluyen todos los archivos necesarios para la aplicación de ejemplo de control de instancias.

  • En la carpeta InstanceQuery se incluyen todos los archivos necesarios para la aplicación de ejemplo de consulta de instancias.

  • En la carpeta TestWorkflow se incluyen todos los archivos necesarios para el flujo de trabajo de ejemplo.

  • El archivo de soluciones InstanceQueryAndControl.sln define la solución que genera todos los artefactos de ejemplo.

Configuración y ejecución de este ejemplo

  1. Cree un almacén de persistencia si no lo hizo durante la instalación de Windows Server AppFabric.

    1. Ejecute C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.Configuration.exe como Administrador. En el paso Configurar trabajador, seleccione la casilla Establecer configuración de persistencia. Seleccione sqlStoreProvider como proveedor de persistencia y, a continuación, haga clic en Configurar.

    2. En la ventana Configuración de almacén SQL de persistencia, seleccione las casillas Agregar registro de almacén de persistencia en web.config raíz e Inicializar almacén de persistencia. Especifique el nombre de la base de datos del almacén de persistencia como ApplicationServerWorkflowInstanceStore. Haga clic en Aceptar para crear una base de datos del almacén de persistencia con el nombre especificado. Si decide elegir un nombre diferente para la base de datos, es necesario cambiar el código del ejemplo (véase a continuación).

  2. Si ejecuta este ejemplo en un sistema de 64 bits, copie el archivo C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.StoreManagement.dll en la carpeta del proyecto.

    Nota

    Deberá usar esta ruta de acceso en el paso 3.

  3. Genere la solución.

    1. Abra Visual Studio 2010 como Administrador: Haga clic en Inicio --> Todos los programas --> Microsoft Visual Studio 2010. Haga clic con el botón secundario en Microsoft Visual Studio 2010 y seleccione Ejecutar como administrador.

    2. Abra el proyecto del ejemplo: En Visual Studio, haga clic en Archivo --> Abrir --> Proyecto o solución. Seleccione el archivo de solución de ejemplo <ejemplos>\Samples\InstanceQueryAndControl\InstanceQueryAndControl.sln. Al abrir el archivo, Visual Studio advierte que la dirección URL de IIS local para el servicio del ejemplo aún no se ha creado. Confirme la creación del nuevo directorio virtual.

    3. Si ejecuta este ejemplo en un sistema de 64 bits, siga los pasos que se describen a continuación para los proyectos InstanceQuery e InstanceControl: En la línea 17 del archivo Program.cs, cambie la ruta de acceso del archivo Microsoft.ApplicationServer.StoreManagement.dll a la ubicación en la que copió el archivo en el paso 2.

    4. En este ejemplo se supone que el flujo de trabajo se conserva en la base de datos de persistencia ApplicationServerWorkflowInstanceStore que hospeda SQL Express. Puede cambiar el nombre de la base de datos y la instancia del servidor SQL Server en las líneas 44 y 45 del archivo Program.cs del proyecto InstanceControl y en las líneas 37 y 38 del archivo Program.cs del proyecto InstanceQuery.

    5. Presione F6 para generar la solución. De este modo, se implementa automáticamente la aplicación TestWorkflow en IIS.

  4. Configure la aplicación TestWorkflow.

    1. Abra el Administrador de IIS: Haga clic en Inicio -->Panel de control->Herramientas administrativas --> Administrador de Internet Information Services (IIS).

    2. Defina el AppPool correcto y habilite el protocolo net.pipe para el sitio.

      • En la ventana Conexiones de IIS, seleccione el nodo <equipo>/Sites/Default Web Site.

      • En la ventana Acciones de IIS, haga clic en Configuración avanzada.

      • Cambie la configuración de Grupo de aplicaciones a ASP.NET v4.0.

      • Cambie la opción Protocolos habilitados a http,net.pipe. Precaución: no debe haber espacios entre la coma y net.pipe.

      • Haga clic en Aceptar.

    3. Defina el AppPool correcto y habilite el protocolo net.pipe para la aplicación.

      • En la ventana Conexiones de IIS, seleccione el nodo <equipo>/Sites/Default Web Site/TestWorkflow.

      • En la ventana Acciones de IIS, haga clic en Configuración avanzada.

      • Cambie la configuración de Grupo de aplicaciones a ASP.NET v4.0.

      • Cambie la opción Protocolos habilitados a http,net.pipe. Precaución: no debe haber espacios entre la coma y net.pipe.

      • Haga clic en Aceptar.

  5. Cree instancias de TestService.

    1. Abra el cliente de prueba de WCF.

      • En la ventana Conexiones del Administrador de IIS, seleccione el nodo <equipo>/Sites/Default Web Site/TestWorkflow.

      • Haga clic con el botón secundario en TestWorkflow y seleccione Cambiar a vista Contenido.

      • Haga clic con el botón secundario en TestService.xamlx y seleccione Examinar. Se inicia un explorador web en el que se muestra la página de bienvenida de TestService.

      • Abra el cliente de prueba de WCF como se indica a continuación: Abra el cliente de prueba de WCF. Haga clic en Inicio --> Todos los programas --> Microsoft Visual Studio 2010 --> Herramientas de Visual Studio --> Símbolo de sistema de Visual Studio (2010). En el símbolo del sistema, escriba el comando wcftestclient.

      • En la ventana de dirección URL del explorador web, copie la dirección URL de TestService (por ejemplo, "https://localhost/TestWorkflow/TestService.xamlx"). En el cliente de prueba de WCF, haga clic con el botón secundario en Mis proyectos de servicio y seleccione Agregar servicio. Cuando se le pida la dirección del extremo, pegue la dirección URL de TestService.

    2. Invoque TestService de la siguiente manera:

      • En la ventana del cliente de prueba de WCF, haga doble clic en el nodo Invoke() situado debajo del nodo IService (BasicHttpBinding_IService).

      • En la pestaña Invocar, haga clic en el campo (null) de la columna Valor. Cambie la selección de (null) a System.Nullable<System.Int32>. Ahora, expanda el nodo int de la columna Nombre. Aparecerá una nueva fila con el valor 0.

      • Haga clic en Invocar. De este modo, se crea una instancia de TestService que se ejecutará durante 10 minutos.

      • Cambie el valor a 1 y haga clic en Invocar. De este modo, se crea una instancia de TestService que se completará inmediatamente.

      • Cambie el valor a 2 y haga clic en Invocar. De este modo, se crea una instancia de TestService que lanzará una excepción y se suspenderá.

  6. Consulte en búsqueda de instancias.

    1. En Visual Studio, asegúrese de que InstanceQuery es el proyecto de inicio predeterminado y presione F5 para consultar en búsqueda de instancias. Se abrirá una ventana de la consola en la que se muestran las tres instancias que creó en el paso 5.b.

    2. De manera alternativa, ejecute el comando InstanceQuery en el símbolo del sistema:

      • Abra un símbolo del sistema. Ejecute el comando <ejemplos>\Samples\Hosting\InstanceQueryAndControl\InstanceQuery\bin\Debug\InstanceQuery.exe [List|Count|Group].
  7. Controle las instancias.

    1. En el símbolo del sistema, ejecute el comando <ejemplos>\Samples\Hosting\InstanceQueryAndControl\InstanceControl\bin\Debug\InstanceControl.exe <InstanceId> [Suspend|Resume|Cancel|Terminate|Delete]. Use el GUID de identificador de instancia de 20 caracteres de cualquiera de las instancias que creó anteriormente.

Eliminación de este ejemplo

  1. Elimine todas las instancias de servicio del servicio TestWorkflow en el almacén de persistencia. Abra una ventana de consola de administrador y emita los comandos siguientes:

    > powershell
    > import-module applicationServer
    > Get-ASAppServiceInstance -SiteName "Default Web Site" -VirtualPath "/TestWorkflow/TestService.xamlx" | Remove-AsAppServiceInstance
    

Demuestra

En el ejemplo se incluyen tres proyectos:

  • TestWorkflow implementa un servicio de WF. El servicio está hospedado en IIS. Cada vez que se invoca el servicio, se crea una nueva instancia. Al invocar el servicio a través del cliente de prueba de WCF, el usuario transfiere un parámetro al servicio. En función de dicho parámetro, la instancia se ejecuta durante 10 minutos, se completa inmediatamente o lanza una excepción.

  • InstanceQuery implementa una aplicación de consola que emite una consulta en el almacén de persistencia y muestra los resultados en pantalla. El usuario debe especificar el tipo de consulta, los parámetros de ésta y la cadena de conexión del almacén de persistencia.

  • InstanceControl implementa una aplicación de consola que emite un comando de control en una instancia que reside en un almacén de persistencia. El usuario debe especificar el tipo de comando, el identificador de la instancia y la cadena de conexión del almacén de persistencia.

Aplicación de ejemplo de consulta de instancia

La aplicación de ejemplo de consulta de instancia demuestra la función y API del proveedor de consultas de AppFabric. El proveedor de consultas permite al usuario emitir tres tipos de consultas:

  • Obtener una lista de instancias que residen en un almacén de persistencia y cuyas propiedades coinciden con la consulta. Esta consulta devuelve una matriz de instanceInfo.

  • Obtener el número de instancias que residen en un almacén de persistencia y cuyas propiedades coinciden con la consulta. Esta consulta devuelve un valor int32.

  • Obtener el número de instancias que residen en un almacén de persistencia y cuyas propiedades coinciden con la consulta, y agruparlas según categorías definidas. Esta consulta devuelve un valor enumerable del tipo groupingResult.

Para cada tipo de consulta, el proveedor de consultas proporciona una API asíncrona que ejecuta la consulta. La entrada y el tipo de resultado varían con el tipo de consulta. Para todos los tipos de consulta, el usuario puede especificar un conjunto de filtros de consulta. En el ejemplo se configuran todos como nulos, lo que significa que la consulta detecta todas las instancias que se encuentran en el almacén. Además de los parámetros del filtro de consulta, el usuario debe proporcionar la cadena de conexión del almacén de persistencia. En el ejemplo se supone que las instancias residen en DefaultSqlWorkflowInstanceStore. También se supone que la base de datos usa la seguridad integrada en Windows para autenticar el acceso a la base de datos.

Al solicitar una lista de instancias, el usuario debe especificar el número máximo de instancias devueltas y el modo de ordenarlas. En la actualidad, el proveedor de consultas únicamente ofrece ordenar por LastUpdatedTime o devolver una lista sin ordenar.

Al solicitar un recuento agrupado de instancias, el usuario debe especificar los parámetros de agrupación. Estos parámetros se proporcionan como Lista<GroupingMode>. El primer elemento define el grupo principal y cada uno de los elementos siguientes define un subgrupo.

Aplicación de ejemplo de control de instancia

La aplicación de ejemplo de control de instancia demuestra la función y API del proveedor de control de AppFabric. El proveedor de control permite a los usuarios emitir un comando suspend, resume, cancel, terminate o delete en una instancia. Además del tipo de comando y el identificador de instancia, el usuario debe proporcionar los identificadores de servicio SiteName, RelativeApplicationPath y VirtualPath. Estos parámetros son necesarios para que WMS pueda calcular el extremo de control de la instancia de servicio. (Los identificadores de servicio sólo son necesarios para los comandos Suspend, Resume, Cancel y Terminate. El comando Delete no se emite en el extremo de control, sino que se ejecuta directamente en la base de datos).

Además de los parámetros del filtro de consulta, el usuario debe proporcionar la cadena de conexión del almacén de persistencia. En el ejemplo se supone que las instancias residen en DefaultSqlWorkflowInstanceStore. También se supone que la base de datos usa la seguridad integrada en Windows para autenticar el acceso a la base de datos.

Tenga en cuenta que la aplicación de ejemplo de control de instancias pone en cola los comandos Suspend, Resume, Cancel o Terminate en la cola de comandos del almacén de persistencia. El comando se ejecuta más tarde. Use las aplicaciones de ejemplo de consulta de instancias para ver si se ha ejecutado el comando y cuándo lo ha hecho.

Tenga en cuenta que un comando para una instancia sólo puede ponerse en cola si no hay ningún otro comando pendiente en cola para dicha instancia.

En la tabla siguiente se describe el efecto de los comandos cuando se emiten en instancias de diversos estados.

Estado actual Suspend Resume Cancel Terminate Delete

Running

Suspende la instancia

Ninguna operación

Cancela la instancia

Finaliza la instancia

Quita la instancia del almacén de persistencia

Suspended

Ninguna operación

Reanuda la instancia

Cancela la instancia

Finaliza la instancia

Quita la instancia del almacén de persistencia

Completed

No se permite

No se permite

No se permite

No se permite

Quita la instancia del almacén de persistencia

WarningAdvertencia
Quitar instancias en ejecución del almacén de persistencia puede provocar un comportamiento impredecible. No es recomendable.

  2011-12-05