Partage via


Procédure de développement d'un fournisseur de requête d'instances

La procédure suivante décrit la création d'un fournisseur de requête d'instances personnalisé.

  1. Créez un projet Class Library.

  2. Ajoutez une référence à Microsoft.ApplicationServer.StoreManagement.dll. Ajoutez en outre des références à System.Configuration.dll et System.Data.dll pour compiler l'exemple de code fourni dans cette rubrique.

  3. Ajoutez les instructions suivantes au début du fichier source.

    using Microsoft.ApplicationServer.StoreManagement.Query;
    using System.Collections.Specialized; 
    using System.Data;
    using System.Data.SqlClient;
    
  4. Créez une classe pour le fournisseur de requête d'instances, dérivée de la classe InstanceQueryProvider.

        public sealed class MySqlInstanceQueryProvider : InstanceQueryProvider
        {
        }
    
  5. Implémentez la méthode Initialize. Cette méthode accepte un jeu de propriétés correspondant aux informations de configuration spécifiées dans le fichier de configuration. Les données dans le jeu de propriétés sont utilisées pour créer le fournisseur. La méthode Initialize est appelée avant la méthode CreateInstanceQuery ou UniqueProviderIdentifier.

    Notes

    Dans les scénarios de communication à distance, l'ensemble nom-valeur contient un élément nommé « EnableServiceModelMetadata ». Le fournisseur peut ignorer et supprimer ce paramètre avant d'appeler la méthode base.Initialize. Cette propriété sert généralement à déterminer s'il faut appeler SetMetadata(“ServiceModel”, true) sur l'objet 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. Implémentez la méthode CreateInstanceQuery de la classe InstanceQueryProvider pour renvoyer un objet InstanceQuery personnalisé.

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

    Notes

    Consultez la section suivante pour l'implémentation du type MySqlInstanceQuery.

  7. Implémentez la méthode UniqueProviderIdentifier. L'ID de fournisseur unique que renvoie cette méthode permet de déterminer si différents objets de fournisseur sont résolus en un magasin sous-jacent identique.

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

Implémentation du type InstanceQuery

La procédure suivante détaille les étapes de création d'un type InstanceQuery personnalisé.

  1. Créez une classe dérivée de la classe InstanceQuery.

        public sealed class MySqlInstanceQuery : InstanceQuery
        {
            string storeName;
            string connectionString;
    
            public MySqlInstanceQuery(string storeName, string connectionString)
            {
               this.storeName = storeName;
                this.connectionString = connectionString;
            }
        }
    
  2. Implémentez la méthode BeginExecuteQuery. Un client utilise cette méthode pour effectuer une requête d'instances.

            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. Implémentez la méthode EndExecuteQuery. Cette méthode doit renvoyer une collection d'objets InstanceInfo.

            public override IEnumerable<InstanceInfo> EndExecuteQuery(IAsyncResult result)
            {
                //uncomment the following line to compile the project or implement the method
                //throw new NotImplementedException();
            }
    
  4. Implémentez la méthode BeginExecuteCount. Un client utilise cette méthode pour effectuer une requête de nombre d'instances.

            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. Implémentez la méthode EndExecuteCount. Cette méthode doit renvoyer un nombre d'instances.

            public override int EndExecuteCount(IAsyncResult result)
            {
                //uncomment the following line to compile the project or implement the method
                //throw new NotImplementedException();
            }
    
  6. Implémentez la méthode BeginExecuteGroupCount. Un client utilise cette méthode pour effectuer une requête de nombre d'instances groupées sur le magasin d'instances.

            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. Implémentez la méthode EndExecuteGroupCount. Cette méthode doit renvoyer une collection d'objets GroupingResult.

            public override IEnumerable<GroupingResult> EndExecuteGroupCount(IAsyncResult result)
            {
                //uncomment the following line to compile the project or implement the method
                //throw new NotImplementedException();
            }
    
  8. Implémentez la méthode Cancel. Un client utilise cette méthode pour annuler l'opération existante.

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

Voir aussi

Concepts

Procédure de développement d'un fournisseur de magasin d'instances
Procédure de développement d'un fournisseur de contrôle des instances
Procédure de configuration de fournisseurs de magasin d'instances, de requête et de contrôle
Fournisseurs de magasin d'instances, de requête et de contrôle

  2012-03-05