Proveedores de almacenes de instancias, consultas y control
Un almacén de instancias es un contenedor lógico de instancias. Se trata de la ubicación en la que se almacenan los datos y los metadatos de la instancia. Un almacén de instancias no significa un almacenamiento físico dedicado. Un almacén de instancias puede contener información durable en una base de datos de SQL Server o información de estado no durable en una memoria. .NET Framework versión 4 incluye el almacén de instancias de flujo de trabajo de SQL, que es una implementación concreta de un almacén de instancias que permite a los flujos de trabajo conservar los datos y los metadatos de la instancia en una base de datos de SQL Server 2005 o SQL Server 2008. Para obtener más información, vea Instance Stores (https://go.microsoft.com/fwlink/?LinkId=181533) (en inglés) en la ayuda de .NET Framework. AppFabric admite la persistencia de instancias del servicio de flujo de trabajo únicamente en bases de datos de SQL Server 2008.
Para usar un almacén de instancias con las herramientas de AppFabric (cmdlets de Windows PowerShell y extensiones del Administrador de IIS) y con el servicio de administración de flujos de trabajo, debe desarrollar un proveedor de almacén de instancias y un proveedor de control de instancias para ese almacén de instancias. En las secciones siguientes se describen estos tres tipos de proveedores.
Nota
La API de los proveedores de consultas y de control de instancias se basa en .NET Framework 2.0, mientras que la API del proveedor de almacén de instancias se basa en .NET Framework versión 4
Proveedores de almacén de instancias
Un proveedor de almacén de instancias expone una API que los clientes invocan para crear objetos de almacén de instancias. El cliente usa el objeto de almacén de instancias para guardar la instancia de flujo de trabajo en el almacén de instancias subyacente (por ejemplo: una base de datos de SQL Server) o para cargar una instancia desde el almacén de instancias.
AppFabric incluye un proveedor de almacén de instancias para el almacén de instancias de flujo de trabajo de SQL. Para admitir un almacén de instancias diferente, debe crear un proveedor de almacén de instancias correspondiente. Para crear un proveedor de almacén de instancias, debe crear una clase que se derive de la clase InstanceStoreProvider e implementar métodos que creen un almacén de instancias, tal como SqlWorkflowInstanceStore. Para obtener más información, vea Cómo Desarrollar un proveedor de almacenes de instancias.
Proveedores de consultas de instancias
Un proveedor de consultas de instancias para un almacén de instancias permite emitir consultas al almacén de instancias. Cuando usa un cmdlet, tal como Get-ASAppServiceInstance, para consultar las instancias de un almacén de instancias, el cmdlet crea un objeto de proveedor de consultas e invoca métodos en él. El objeto de proveedor de consultas crea consultas y las ejecuta en el almacén de instancias, y devuelve los resultados de la consulta al cmdlet. Las extensiones del Administrador de IIS de AppFabric usan cmdlets en la mayoría de escenarios para consultar almacenes de instancias. Por lo tanto, también dependen de los proveedores de consultas.
Todos los proveedores de consultas implementan la misma API y proporcionan una capa de abstracción por encima de los diversos almacenes de instancias subyacentes. AppFabric incluye un proveedor de consultas de instancias para el almacén de instancias de flujo de trabajo de SQL, lo que permite consultar las instancias almacenadas en la base de datos de persistencia de SQL Server. Cuando el proveedor de consultas de SQL recibe una consulta de un cliente (por ejemplo, un cmdlet de Windows PowerShell), consulta y recupera datos de instancias de la base de datos de SQL Server y devuelve el conjunto de resultados al cliente. La implementación del proveedor de consultas de instancias para el almacén de instancias de flujo de trabajo de SQL se encuentra en Microsoft.ApplicationServer.StoreManagement.dll.
Para admitir consultas en un tipo diferente de almacén de instancias, es necesario disponer de un proveedor de consultas de instancias correspondiente. Para crear un proveedor de consultas personalizado, es necesario crear una clase que se derive de la clase InstanceQueryProvider e implementar métodos para ejecutar consultas en nombre del cliente. Para obtener más información, vea Cómo Desarrollar un proveedor de consultas de instancias.
Proveedores de control de instancias
Un proveedor de control de instancias permite que un cliente emita comandos de control para instancias de un almacén de instancias y recupere los comandos que deban ejecutarse en una instancia. Cuando usa un cmdlet Windows PowerShell de AppFabric para controlar (suspender, reanudar, etcétera) una instancia del almacén de instancias, el cmdlet crea un objeto de proveedor de control e invoca un método en el objeto para agregar el comando a una cola de comandos. El proveedor de control mantiene la cola de comandos almacenada en el almacén de instancias. Un host genérico, tal como el servicio de administración de flujos de trabajo (WMS), crea un objeto de proveedor de control, invoca un método en él para recuperar el comando almacenado en la cola de comandos y ejecuta el comando. El WMS notifica al proveedor de control sobre el error o el éxito de la ejecución. Si la ejecución fue correcta, el proveedor de control quita el comando de la cola; de lo contrario, el WMS notifica el error al proveedor de control y éste realiza la acción adecuada.
Además de reenviar un comando desde la cola de comandos al WMS, un proveedor de control de instancias reenvía un contenedor de propiedades que contenga los metadatos sobre la instancia en la que se emitió el comando. Este contenedor de propiedades contiene el nombre del sitio y la ruta de acceso al servicio virtual de la instancia. El proveedor de control obtiene estos metadatos del almacén de instancias. El WMS usa estos metadatos para obtener acceso al extremo de control de instancias (ICE) expuesto por la instancia de servicio e invoca los métodos adecuados en el extremo.
Todos los proveedores de consultas implementan la misma API y proporcionan una capa de abstracción por encima de los diversos almacenes de instancias subyacentes. AppFabric incluye un proveedor de control de instancias para el almacén de instancias de flujo de trabajo de SQL, lo que permite emitir comandos de control en la base de datos de persistencia de SQL Server. La implementación del proveedor de control de instancias para el almacén de instancias de flujo de trabajo de SQL se encuentra en Microsoft.ApplicationServer.StoreManagement.dll. Para que se admita la emisión de comandos en instancias almacenadas en un tipo de almacén de instancias diferente, es necesario desarrollar un proveedor de control de instancias correspondiente.
Para crear un proveedor de control personalizado, debe crear una clase que se derive de la clase InstanceControlProvider e implementar métodos para agregar comandos a la cola de comandos, así como recuperarlos de ella, en nombre de los clientes. Para obtener más información, vea Cómo Desarrollar un proveedor de control de instancias.
Proveedor de control de instancias para el almacén de instancias de flujo de trabajo de SQL
AppFabric incluye un proveedor de control de instancias para el almacén de instancias de flujo de trabajo de SQL. El proveedor de control de instancias mantiene la cola de comandos en una base de datos de SQL Server. Cuando ejecuta un cmdlet de control en el almacén de instancias de flujo de trabajo de SQL, el proveedor de control de instancias recibe la solicitud y almacena la información del comando en la cola de comandos de la base de datos de SQL Server. El WMS usa el proveedor de control de instancias para recuperar el comando de la cola de comandos, ejecuta el comando en el almacén de instancias de flujo de trabajo de SQL y elimina el comando de la cola de comandos si la ejecución del comando es correcta. La implementación del proveedor de control de instancias para el almacén de instancias de flujo de trabajo de SQL se encuentra en Microsoft.ApplicationServer.StoreManagement.dll.
Los puntos siguientes se aplican al proveedor de control de instancias para el almacén de instancias de flujo de trabajo de SQL:
Procesa inmediatamente (de forma sincrónica) el comando Eliminar. Todos los demás comandos se ponen en (agregan a) la cola de comandos antes de que el proveedor de control entregue los comandos al WMS para que los procese.
La cola de comandos usa el método FIFO (primero en entrar, primero en salir). El proveedor de control agrega los comandos nuevos al final de la cola y lee el primer comando. El proveedor de control devuelve el comando más antiguo, que no está bloqueado, al WMS.
El proveedor de control puede almacenar un único comando por instancia en la cola. Cuando el proveedor recibe una solicitud de puesta en cola de un comando para una instancia de la que ya existe un comando en la cola, sobrescribe el comando existente, si éste no está bloqueado. Si el comando está bloqueado o si está en estado Pendiente, el proveedor de control devuelve un error.
El proveedor de control coloca un bloqueo temporal después de leer un comando de la cola de comandos. Este bloqueo caduca después de 65 segundos. Después de recibir una notificación del WMS sobre la ejecución correcta del comando, el proveedor quita el comando de la cola de comandos.
Si se produce un error en la ejecución de un comando, el proveedor de control lo vuelve a intentar cinco veces. La cola de comandos mantiene un contador de intentos de ejecución con error. Si se produce un error al ejecutar el comando por quinta vez, el proveedor quita el comando de la cola de comandos.
El proveedor de control mantiene un registro de errores de ejecución de comandos en la base de datos. Este registro almacena los metadatos sobre los comandos con errores y las razones de los mismos. El registro contiene como mucho un comando con error por instancia. Cada entrada de registro contiene el tipo de comando, el identificador de la instancia, el código de error, el mensaje de error, la hora en que se intentó la última ejecución, el identificador del equipo en el que se realizó la ejecución del comando y el número de ejecuciones intentadas.
Una entrada de registro para una instancia se quita cuando se pone en cola un comando nuevo para la instancia, o cuando un usuario quita la instancia del almacén de instancias. Un usuario puede quitar la instancia mediante un cmdlet (por ejemplo: Remove-ASAppServiceInstance).
El proveedor de control quita comandos de la cola en lotes de 10.
Vea también
Conceptos
Cómo Desarrollar un proveedor de almacenes de instancias
Cómo Desarrollar un proveedor de consultas de instancias
Cómo Desarrollar un proveedor de control de instancias
Cómo configurar proveedores de almacenes de instancias, consultas y control
2011-12-05