Cómo Desarrollar un proveedor de consultas de instancias
El procedimiento siguiente proporciona los pasos para crear un proveedor de consultas de instancias personalizado.
Cree un proyecto de biblioteca de clases.
Agregue una referencia a Microsoft.ApplicationServer.StoreManagement.dll. Asimismo, agregue referencias a System.Configuration.dll y System.Data.dll, para compilar el código de ejemplo que se proporciona en este tema.
Agregue la siguiente sentencia al principio del archivo de origen.
using Microsoft.ApplicationServer.StoreManagement.Query; using System.Collections.Specialized; using System.Data; using System.Data.SqlClient;
Cree una clase para el proveedor de consultas de instancias que derive de la clase InstanceQueryProvider.
public sealed class MySqlInstanceQueryProvider : InstanceQueryProvider { }
Implemente el método Initialize. Este método acepta un contenedor de propiedades que corresponde a la información de configuración especificada en el archivo de configuración. Los datos de este contenedor de propiedades se usan para crear el proveedor. El método Initialize se llama antes que el método CreateInstanceQuery o UniqueProviderIdentifier.
Nota
En escenarios remotos, la colección de valores de nombre contendría un elemento denominado “EnableServiceModelMetadata”. El proveedor puede elegir entre pasar por alto o quitar este parámetro, antes de invocar el método base.Initialize. Esta propiedad se usa típicamente para determinar si se debe invocar SetMetadata(“ServiceModel”, true) en el objeto Microsoft.Web.Administration.ServerManager.
string storeName; string ConnectionString { get; set; } public override void Initialize(string name, NameValueCollection config) { this.storeName = name; this.ConnectionString= config["connectionString"]; // Initialize the base class base.Initialize(name, config); }
Implemente el método CreateInstanceQuery de la clase InstanceQueryProvider, para devolver un objeto InstanceQuery personalizado.
public override InstanceQuery CreateInstanceQuery() { SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(this.ConnectionString); connectionStringBuilder.AsynchronousProcessing = true; return new MySqlInstanceQuery(this.storeName, connectionStringBuilder.ConnectionString); }
Nota
Vea la siguiente sección para la implementación del tipo MySqlInstanceQuery.
Implemente el método UniqueProviderIdentifier. El identificador de proveedor exclusivo que este método devuelve se usa para determinar si los diferentes objetos de proveedor se resuelven en el mismo almacén subyacente.
string UniqueStoreIdentifier { get; set; } public override string UniqueProviderIdentifier() { this.UniqueStoreIdentifier = GetUniqueStoreIdentifier(this.ConnectionString); return this.UniqueStoreIdentifier; } private string GetUniqueStoreIdentifier(string connectionString) { using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand()) { command.CommandType = CommandType.Text; command.CommandText = "SELECT TOP (1) [StoreIdentifier] FROM [Microsoft.ApplicationServer.DurableInstancing].[StoreVersion]"; command.Connection = connection; command.Connection.Open(); Guid identifier = (Guid)command.ExecuteScalar(); return identifier.ToString(); } } }
Implementación de InstanceQuery
El procedimiento siguiente proporciona los pasos para crear un tipo InstanceQuery personalizado.
Cree una clase que derive de la clase InstanceQuery.
public sealed class MySqlInstanceQuery : InstanceQuery { string storeName; string connectionString; public MySqlInstanceQuery(string storeName, string connectionString) { this.storeName = storeName; this.connectionString = connectionString; } }
Implemente el método BeginExecuteQuery. Un cliente usa este método para consultar instancias.
public override IAsyncResult BeginExecuteQuery(InstanceQueryExecuteArgs args, TimeSpan timeout, AsyncCallback callback, object state) { //uncomment the following line to compile the project or implement the method //throw new NotImplementedException(); }
Implemente el método EndExecuteQuery. Este método debe devolver una colección de objetos InstanceInfo.
public override IEnumerable<InstanceInfo> EndExecuteQuery(IAsyncResult result) { //uncomment the following line to compile the project or implement the method //throw new NotImplementedException(); }
Implemente el método BeginExecuteCount. Un cliente usa este método para consultar un recuento de instancias.
public override IAsyncResult BeginExecuteCount(InstanceQueryArgs args, TimeSpan timeout, AsyncCallback callback, object state) { //uncomment the following line to compile the project or implement the method //throw new NotImplementedException(); }
Implemente el método EndExecuteCount. Este método debe devolver una recuento de instancias.
public override int EndExecuteCount(IAsyncResult result) { //uncomment the following line to compile the project or implement the method //throw new NotImplementedException(); }
Implemente el método BeginExecuteGroupCount. Un cliente usa este método para consulta recuentos de instancias agrupadas en el almacén de instancias.
public override IAsyncResult BeginExecuteGroupCount(InstanceQueryGroupArgs args, TimeSpan timeout, AsyncCallback callback, object state) { //uncomment the following line to compile the project or implement the method //throw new NotImplementedException(); }
Implemente el método EndExecuteGroupCount. Este método debe devolver una colección de objetos GroupingResult.
public override IEnumerable<GroupingResult> EndExecuteGroupCount(IAsyncResult result) { //uncomment the following line to compile the project or implement the method //throw new NotImplementedException(); }
Implemente el método Cancel. Un cliente invoca este método para cancelar la operación existente.
public override void Cancel(IAsyncResult result) { //uncomment the following line to compile the project or implement the method //throw new NotImplementedException(); }
Vea también
Conceptos
Cómo Desarrollar un proveedor de almacenes de instancias
Cómo Desarrollar un proveedor de control de instancias
Cómo configurar proveedores de almacenes de instancias, consultas y control
Proveedores de almacenes de instancias, consultas y control
2011-12-05