Estenda a classe DataCacheStoreProvider (Cache do AppFabric 1.1)
Este tópico descreve como criar um provedor read-through/escrita atrasada para Cache do Windows Server AppFabric. Crie um provedor implantando a classe abstrata básica DataCacheStoreProvider.
Crie o projeto do provedor
No Visual Studio 2010, crie um novo projeto Biblioteca de classes.
Adicione uma referência ao assembly Microsoft.ApplicationServer.Core.dll. Por padrão, esse assembly fica localizado em .\Arquivos de Programas\Windows Server AppFabric.
Abra o arquivo de origem para esse projeto, que é Class1.cs ou Class1.vb, dependendo do idioma do projeto.
Na parte superior do arquivo de origem, adicione um demonstrativo em uso (Importações no Visual Basic) ao namespace Microsoft.ApplicationServer.Caching.
using Microsoft.ApplicationServer.Caching;
Imports Microsoft.ApplicationServer.Caching
Modifique a classe para que ela seja herdada de DataCacheStoreProvider. Observe que o editor de códigos do Visual Studio 2010 fornece um recurso para a criação automática de funções vazias a partir dessa classe. No Visual C#, clique com o botão direito do mouse na classe DataCacheStoreProvider e selecione Implementar classe abstrata. No Visual Basic, pressione Enter após a linha Herdar.
namespace RTProvider { public class Provider : DataCacheStoreProvider
Public Class Provider Inherits DataCacheStoreProvider
Assine o assembly para instalá-lo no Cache de Assembly Global com um nome forte. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Propriedades. Na seção Assinatura das propriedades do projeto, marque a caixa de seleção Assinar o assembly. Na lista suspensa Escolher arquivo de chave com nome forte, selecione um arquivo de chave existente ou selecione <Novo...> para criar um.
Adicione um construtor público
Cada provedor deve implementar um construtor público com a seguinte assinatura:
public ProviderClass(string cacheName, Dictionary<string,string> config)
Substitua ProviderClass
no exemplo acima com o nome da sua classe que implementa os métodos de DataCacheStoreProvider. Esse construtor será chamado quando um cache habilitar primeiro read-through ou escrita atrasada em um host de cache em execução. Ele também será chamado todas as vezes que um host de cache for reiniciado. O construtor adota os dois parâmetros a seguir:
Parâmetro | Descrição |
---|---|
cacheName |
string é o nome do cache que está sendo associado ao provedor. Esse nome pode ser armazenado para uso no futuro. Por exemplo, é necessário saber o nome do cache ao criar novos objetos de DataCacheItem em resposta às solicitações de leitura. |
config |
O objeto Dictionary<string,string> contém configurações para o provedor. Essas configurações são personalizadas para o provedor e as necessidades de configuração do provedor durante o tempo de execução. Elas são transmitidas por meio do parâmetro ProviderSettings do comando New-Cache ou Set-CacheConfig do Windows Powershell. |
Implemente os métodos do provedor
Os métodos da classe DataCacheStoreProvider precisam ser implementados pelo provedor. Observe que se você estiver criando apenas um provedor read-through, não será necessário implementar os métodos "Gravação". Da mesma forma, se você estiver criando apenas um provedor escrita atrasada, não será necessário implementar os métodos "Leitura".
Os nomes dos métodos geralmente descrevem os seus objetivos. A tabela a seguir descreve os métodos sem incluir as sobrecargas.
Método | Descrição |
---|---|
Read |
É chamado quando um cliente de cache solicita um item em cache que não existe atualmente no cache associado. |
Write |
É chamado para itens adicionados ou alterados recentemente pelos clientes de cache no cache. |
Delete |
É chamado quando um cliente de cache remove um item do cache associado. |
Dispose |
Descarta o provedor. |
Há dois métodos de leitura. O primeiro método Leitura é transmitido por um parâmetro DataCacheItemKey que identifica o item único de será retornado. A outra sobrecarga Leitura é transmitida por um conjunto de objetos DataCacheItemKey para recuperar e transmitir de volta em um Dictionary de objetos DataCacheItemKey e DataCacheItem. Inicialmente, esse objeto de dicionário fica vazio e os itens de leitura precisam ser adicionados antes do retorno a partir do método Leitura. Observe que se você precisa usar a classe DataCacheItemFactory para criar os itens solicitados de acordo com o exemplo a seguir.
DataCacheItem dataCacheItem = DataCacheItemFactory.GetCacheItem(key, CACHE_NAME, objectValue, null);
No exemplo anterior, a cadeia de caracteres CACHE_NAME
deve ter sido definida com o nome do cache transmitido anteriormente para o construtor sobrecarregado. A key
é a DataCacheItemKey solicitada. O objectValue
é o objeto que deve ser retornado aos clientes dessa chave de cache.
Da mesma forma, há dois métodos de gravação. O primeiro método Gravação é transmitido por um objeto DataCacheItem. Observe que a propriedade Key do objeto contém a DataCacheItemKey associada, e a propriedade Value contém o valor. O outro método Gravação é transmitido por um Dictionary de objetos DataCacheItemKey e DataCacheItem.
Importante
É importante remover os itens do objeto Dictionary<DataCacheItemKey, DataCacheItem> conforme você gravá-los no repositório de back-end. Se os itens não forem removidos, o cache considerará que há falha na gravação e tentará realizar a operação posteriormente.
Tratamento de Erros
Se não houver erros, você poderá gerar um objeto de exceção DataCacheStoreException. O resultado dessa exceção poderá variar se a exceção ocorrer durante o método Read ou o método Write. A tabela a seguir descreve essas diferenças.
Método | Resultado da exceção gerada |
---|---|
Read |
O cliente de cache que está realizando a leitura recebe uma exceção DataCacheException com a propriedade ErrorCode igual à DataCacheErrorCode.ReadThroughProviderFailure (o texto da exceção inclui o código "<ERRCA0025>"). |
Write |
A gravação será considerada uma falha e não será repetida com base na política de novas tentativas do cache para operações de escrita atrasada O cliente de cache não será informado sobre esse erro. |
Há três valores DataCacheErrorCode possíveis que um cliente de cache pode receber durante chamadas de DataCache.Get que acessam o provedor read-through.
DataCacheErrorCode.ReadThroughProviderFailure
DataCacheErrorCode.ReadThroughProviderDidNotReturnResult
DataCacheErrorCode.ReadThroughProviderNotFound
Observe também que o tempo gasto nos métodos Leitura do provedor é adicionado ao tempo de solicitação total do método DataCache.Get. Por isso, talvez seja necessário aumentar o tempo limite de solicitação para a contabilização de qualquer atraso apresentado pelo provedor. Para obter mais informações, consulte Configurando tempos limites do cliente de cache (cache do Windows Server AppFabric).
Como testar e depurar o provedor
Para desenvolvimento e teste, é recomendável configurar um cluster de cache de nó único na máquina de desenvolvimento. Isso permite que você recompile rapidamente, adicione novamente o assembly ao Cache de Assembly Global e reinicie o cluster de cache local. As etapas a seguir mostram como depurar o provedor.
Abra o projeto do provedor em Visual Studio 2010.
No menu Depurar, clique em Anexar ao processo.
Marque Mostrar processos de todos os usuários e Mostrar processo em todas as sessões.
Selecione o processo DistributedCacheService.exe.
Clique no botão Anexar.
Defina os pontos de interrupção no código do seu provedor e realize as operações no cache a partir de outro aplicativo que resulte na chamada de métodos do provedor.
Aviso
A interrupção da sessão de depuração sem desanexar o depurador interromperá o serviço de cache na máquina. Isso resultará na perda de todos os dados armazenados em cache nessa máquina.
Consulte também
Conceitos
Implante um provedor read-through/escrita atrasada (Cache do AppFabric v1.1)
Enable Read-Through and Write-Behind on a Cache (AppFabric 1.1 Caching)
2012-03-05