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.
Crie um projeto de Biblioteca de Classe.
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.
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;
Crie uma classe para o provedor de consulta de instâncias derivada da classe InstanceQueryProvider.
public sealed class MySqlInstanceQueryProvider : InstanceQueryProvider { }
Implemente o método Initialize. Esse método aceita um recipiente de propriedades que corresponde às informações de configuração especificadas no arquivo de configuração. Os dados neste recipiente de propriedades são usados para construir o provedor. O método Inicializar é chamado antes de método CreateInstanceQuery, ou UniqueProviderIdentifier, ser chamado.
Observação
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); }
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); }
Observação
Consulte a próxima seção para obter mais informações sobre a implementação do tipo MySqlInstanceQuery.
Implemente o método UniqueProviderIdentifier. A ID exclusiva do provedor que esse método retorna é usada para determinar se objetos diferentes do provedor são resolvidos no mesmo repositório 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.
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; } }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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 provedores de repositório de instância, consulta e controle
Provedores de repositório de instância, consulta e controle
2012-03-05