Partilhar via


Como: desenvolver provedores de consulta de instância

O procedimento a seguir apresenta as etapas para criar um provedor de consulta de instâncias personalizado.

  1. Crie um projeto de Biblioteca de Classe.

  2. Adicione uma referência ao Microsoft.ApplicationServer.StoreManagement.dll. Além disso, adicione referências ao System.Configuration.dll e ao System.Data.dll para compilar o código de exemplo fornecido neste tópico.

  3. Adicione a seguinte instrução no início do arquivo de origem.

    using Microsoft.ApplicationServer.StoreManagement.Query;
    using System.Collections.Specialized; 
    using System.Data;
    using System.Data.SqlClient;
    
  4. Crie uma classe para o provedor de consulta de instâncias derivada da classe InstanceQueryProvider.

        public sealed class MySqlInstanceQueryProvider : InstanceQueryProvider
        {
        }
    
  5. Implemente o método Inicializar. Esse método aceita um recipiente de propriedades que corresponde às informações de configuração especificadas no arquivo de configuração. Os dados desse recipiente de propriedades são usados para construir o provedor. O método Inicializar é chamado antes de método CreateInstanceQuery, ou UniqueProviderIdentifier, ser chamado.

    Dica

    Em cenários remotos, a coleção nome-valor pode conter um item denominado “EnableServiceModelMetadata”. O provedor pode optar por ignorar e remover esse parâmetro antes de invocar o método base.Initialize. Normalmente, essa propriedade é utilizada para determinar se SetMetadata(“ServiceModel”, true) deve ser invocado no 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);
            }
    
  6. Implemente o método CreateInstanceQuery da classe InstanceQueryProvider para retornar um objeto InstanceQuery personalizado.

            public override InstanceQuery CreateInstanceQuery()
            {
                SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(this.ConnectionString);
                connectionStringBuilder.AsynchronousProcessing = true;
                return new MySqlInstanceQuery(this.storeName, connectionStringBuilder.ConnectionString);
            }
    

    Dica

    Consulte a próxima seção para obter mais informações sobre a implementação do tipo MySqlInstanceQuery.

  7. Implemente o método UniqueProviderIdentifier. O único ID de provedor que esse método retorna é utilizado para determinar se objetos de provedores diferentes são resolvidos para o mesmo armazenamento subjacente.

            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();
                    }
                }
            }
    

Implementando o InstanceQuery

O procedimento a seguir apresenta as etapas para criar um tipo InstanceQuery personalizado.

  1. Crie uma classe a partir da classe InstanceQuery.

        public sealed class MySqlInstanceQuery : InstanceQuery
        {
            string storeName;
            string connectionString;
    
            public MySqlInstanceQuery(string storeName, string connectionString)
            {
               this.storeName = storeName;
                this.connectionString = connectionString;
            }
        }
    
  2. Implemente o método BeginExecuteQuery. Um cliente utiliza esse método para consultar instâncias.

            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();
            }
    
  3. Implemente o método EndExecuteQuery. Esse método deve retornar uma coleção 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();
            }
    
  4. Implemente o método BeginExecuteCount. Um cliente utiliza esse método para consultar uma conta de instância.

            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();
            }
    
  5. Implemente o método EndExecuteCount. Esse método deve retornar uma conta de instâncias.

            public override int EndExecuteCount(IAsyncResult result)
            {
                //uncomment the following line to compile the project or implement the method
                //throw new NotImplementedException();
            }
    
  6. Implemente o método BeginExecuteGroupCount. Um cliente utiliza esse método para consultar uma conta de instância agrupada comparada ao armazenamento de instância.

            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();
            }
    
  7. Implemente o método EndExecuteGroupCount. Esse método deve retornar uma coleção 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();
            }
    
  8. Implemente o método Cancelar. Um cliente invoca esse método para cancelar a operação existente.

            public override void Cancel(IAsyncResult result)
            {
                //uncomment the following line to compile the project or implement the method
                //throw new NotImplementedException();
            }
    

Consulte também

Conceitos

Como: desenvolver provedores de repositório de instância
Como: desenvolver provedores de controle de instância
Como: configurar repositório de instância, consulta e Provedores de controle
Repositório de instância, Consulta e Provedores de controle

  2011-12-05