Melhorando os recursos de cache em WebServices - Búfalo Informática
Dica No : 668
Titulo: Melhorando os recursos de cache em WebServices
Quando utilizamos WebServices podemos configurar o cache de resposta dos webServices através do atributo cacheDuration. Este atributo é configurado em segundos, assim sendo durante este tempo o webService não será processado, seu resultado será devolvido a partir do cache.
Porém em determinados casos não desejaremos manter informações em cache com base em tempo. Desejaremos manter a informação em cache até que os dados sofram alguma alteração e, quando isso acontecer, invalidar o cache imediatamente. Se utilizarmos apenas o atributo cacheDuration quando os dados forem alterados ainda assim a resposta continuará sendo a do cache, até que o tempo do cacheduration passe.
O mesmo problema também ocorre com páginas e sugeri uma solução no artigo que encontra-se em http://www.bufaloinfo.com.br/artigos/coluna11.asp , mas como resolver o problema em um WebService ?
Através do objeto httpCachePolicy que pode ser acessado através de context.response.cache, podemos controlar os critérios para que o cache seja mantido ou não, e assim ter um maior controle sobre o processo de cache.
<WebMethod(cacheduration:=360)> _
Context.Response.Cache.AddValidationCallback(AddressOf Validate, Nothing)
'aqui continua o processamento
Public Sub Validate(ByVal context As HttpContext, ByVal data As Object, ByRef status As HttpValidationStatus)
If Not IsNothing(context.Cache("dados")) Then
'Pode-se carregar o dataset aqui
'em seguida insere-se o dataset no cache
context.Cache.Insert("dados", ds1, New Caching.CacheDependency("c:\dados\arquivo.xml"))
Utilizamos o método AddValidationCallBack para adicionar no httpcachepolicy uma referência para o método validate. Desta forma o método validate será chamado para verificar se o cache deve ou não ser mantido.
Com isso ganhamos dos dois lados : mantemos os dados em cache, evitando ir ao banco e invalidamos o cache quando ocorrer mudança, ao mesmo tempo que também mantemos a página em cache, evitando fazer o processamento de retorno e obtendo o máximo em performance e escalabilidade.