Postupy: Vývoj zprostředkovatele dotazů na instance
Následující postup obsahuje kroky k vytvoření vlastního zprostředkovatele dotazů na instance.
Vytvořte projekt knihovny tříd.
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.
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;
Odvozením od třídy InstanceQueryProvider vytvořte třídu pro zprostředkovatele dotazů na instance.
public sealed class MySqlInstanceQueryProvider : InstanceQueryProvider { }
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); }
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.
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.
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; } }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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