Sdílet prostřednictvím


Postupy: Vývoj zprostředkovatele dotazů na instance

Následující postup obsahuje kroky k vytvoření vlastního zprostředkovatele dotazů na instance.

  1. Vytvořte projekt knihovny tříd.

  2. Přidejte odkaz na knihovnu Microsoft.ApplicationServer.StoreManagement.dll. Kromě toho přidejte odkazy na knihovny System.Configuration.dll a System.Data.dll za účelem kompilace ukázky kódu poskytnuté v tomto tématu.

  3. Na začátek zdrojového souboru přidejte následující příkaz.

    using Microsoft.ApplicationServer.StoreManagement.Query;
    using System.Collections.Specialized; 
    using System.Data;
    using System.Data.SqlClient;
    
  4. Odvozením od třídy InstanceQueryProvider vytvořte třídu pro zprostředkovatele dotazů na instance.

        public sealed class MySqlInstanceQueryProvider : InstanceQueryProvider
        {
        }
    
  5. Implementujte metodu Initialize. Tato metoda přijímá balík vlastností, který odpovídá konfiguračním informacím zadaným v konfiguračním souboru. Data v tomto balíku vlastností se použijí k sestavení zprostředkovatele. Metoda Initialize je volána před voláním metody CreateInstanceQuery nebo UniqueProviderIdentifier.

    Poznámka

    Pro vzdálené scénáře by kolekce název-hodnota obsahovala položku nazvanou EnableServiceModelMetadata. Zprostředkovatel se může před vyvoláním metody base.Initialize rozhodnout ignorovat a odebrat tento parametr. Tato vlastnost obvykle slouží k určení toho, zda vyvolat metodu SetMetadata(“ServiceModel”, true) u objektu 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. Implementujte metodu CreateInstanceQuery třídy InstanceQueryProvider, čímž dosáhnete vrácení vlastního objektu InstanceQuery.

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

    Poznámka

    Informace o implementaci typu MySqlInstanceQuery naleznete v další části.

  7. Implementujte metodu UniqueProviderIdentifier. Na základě jedinečného ID zprostředkovatele vráceného touto metodou lze určit, zda různé objekty zprostředkovatelů po svém překladu odkazují na stejné základní úložiště.

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

Implementace metody InstanceQuery

Následující postup obsahuje kroky k vytvoření vlastního typu InstanceQuery.

  1. Vytvořte třídu odvozenou od třídy InstanceQuery.

        public sealed class MySqlInstanceQuery : InstanceQuery
        {
            string storeName;
            string connectionString;
    
            public MySqlInstanceQuery(string storeName, string connectionString)
            {
               this.storeName = storeName;
                this.connectionString = connectionString;
            }
        }
    
  2. Implementujte metodu BeginExecuteQuery. Klient bude pomocí této metody zadávat dotazy na instance.

            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. Implementujte metodu EndExecuteQuery. Tato metoda by měla vrátit kolekci objektů InstanceInfo.

            public override IEnumerable<InstanceInfo> EndExecuteQuery(IAsyncResult result)
            {
                //uncomment the following line to compile the project or implement the method
                //throw new NotImplementedException();
            }
    
  4. Implementujte metodu BeginExecuteCount. Klient bude pomocí této metody zadávat dotazy na počet instancí.

            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. Implementujte metodu EndExecuteCount. Tato metoda by měla vrátit počet instancí.

            public override int EndExecuteCount(IAsyncResult result)
            {
                //uncomment the following line to compile the project or implement the method
                //throw new NotImplementedException();
            }
    
  6. Implementujte metodu BeginExecuteGroupCount. Klient bude pomocí této metody zadávat do úložiště instancí dotazy na počet seskupených instancí.

            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. Implementujte metodu EndExecuteGroupCount. Tato metoda by měla vrátit kolekci objektů GroupingResult.

            public override IEnumerable<GroupingResult> EndExecuteGroupCount(IAsyncResult result)
            {
                //uncomment the following line to compile the project or implement the method
                //throw new NotImplementedException();
            }
    
  8. Implementujte metodu Cancel. Klient vyvoláním této metody zruší stávající operaci.

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

Další odkazy

Koncepty

Postupy: Vývoj zprostředkovatele úložiště instancí
Postupy: Vývoj zprostředkovatele řízení instancí
Postupy: Konfigurace zprostředkovatelů úložišť instancí, dotazů a řízení
Zprostředkovatelé úložiště instancí, dotazů a řízení

  2011-12-05