2010-01-13 10 views
1

J'ai une application ASP.NET qui nécessite une mise en cache de sortie. J'ai besoin d'invalider les éléments mis en cache lorsque les données retournées par un service web changent, donc une simple durée n'est pas assez bonne.Mise en cache de sortie ASP.NET - mise à jour dynamique des dépendances

J'ai fait un peu de lecture sur les dépendances de cache et pense que j'ai la bonne idée. Il semblerait que je devrais créer une dépendance de cache à mon service Web.

Pour associer la sortie avec cette dépendance, je pense que je devrais utiliser la méthode suivante:

Response.AddCacheItemDependency (cacheKey);

La chose avec laquelle je me bats est ce que je devrais ajouter au cache?

La dépendance de ma page correspond à une seule valeur renvoyée par le service Web. Ma pensée actuelle est que je devrais créer une dépendance de cache personnalisée en sous-classant CacheDependency, et stocker la valeur actuelle dans le cache. Je peux ensuite utiliser Response.AddCacheItemDependency pour former la dépendance.

Je peux ensuite vérifier périodiquement la valeur et un NotifyDependencyChange afin d'invalider ma réponse HTTP mise en cache. Le problème est, je dois m'assurer que le cache est vidé immédiatement, ainsi une vérification périodique n'est pas assez bonne. Comment puis-je m'assurer que mon objet dépendant dans le cache qui représente la valeur renvoyée par le service Web est réévalué avant que la réponse HTTP ne soit extraite du cache?

Cordialement, Colin E.

Répondre

0

je crois que vous êtes sur la bonne voie avec votre dépendance de cache. Toutefois, si vous ne vérifiez pas périodiquement la valeur de retour du service Web, comment pouvez-vous savoir quand il renvoie une nouvelle valeur? Vous devrez peut-être configurer un service Web dans l'autre direction, de sorte que lorsque la valeur change dans l'autre système, il peut appeler votre système et invalider l'ancien cache et s'en tenir à la nouvelle valeur.

+0

Salut Ray, merci pour votre réponse. L'appel de service Web est peu coûteux et c'est quelque chose que je peux faire chaque fois qu'une page est demandée. Ce que je dois savoir, c'est où dans mon application ASP je devrais faire cette vérification, il devrait se produire avant que le serveur détermine si retourner une réponse en cache. – ColinE

+0

Eh bien, vous pourriez le faire à chaque demande de page, mais cela semble inutile si vous avez un site occupé. Si l'appel est si peu coûteux, pourriez-vous vivre avec une période très courte (quelques secondes) entre les tests de cache? Ou est-il absolument essentiel que les données ne soient pas tellement dépassées d'une seconde? (Bien sûr, les données seront périmées à un moment donné car elles sont affichées sur l'écran de l'utilisateur en attente d'être lues.) – Ray

0

Vous pouvez annuler manuellement une page en cache à l'aide:

System.Web.HttpResponse.RemoveOutputCacheItem(path) 
+0

Salut, Merci pour l'info - Je n'étais pas au courant de cela. Lorsque l'utilisateur demande une page, ai-je la possibilité de retirer la page du cache avant que le serveur recherche une réponse mise en cache? Cela me permettrait de vérifier le service Web distant avant que chaque demande de page soit traitée. – ColinE

+0

Non, vous devez invalider le cache avant que la page ne soit demandée. Normalement, vous le faites lorsque les données sont mises à jour, soit automatiquement en utilisant les dépendances du cache, soit manuellement en utilisant le code ci-dessus. –