2010-11-30 3 views
0

Après avoir cherché pendant des mois, j'ai finalement décidé de publier ce message.Rafraîchir le cache de la bibliothèque de l'entreprise après la mise à jour de l'application externe

Nous avons une application ASP.NET MVC qui utilise la bibliothèque d'entreprise pour mettre en cache des éléments. Nous utilisons également un service Windows qui, de temps en temps, met à jour ces éléments en cache. Le problème est que lorsque le service Windows met à jour les éléments mis en cache, le site Web mvc ne voit pas les éléments mis à jour mis en cache tant que nous n'avons pas réinitialisé IIS. Nous avons pensé à mettre du code dans le service pour redémarrer le service IIS mais nous pensons qu'il doit y avoir un meilleur moyen. Il semble y avoir un autre article qui parle de supprimer des éléments d'une application externe, mais cela ne va pas assez loin.

Nous pensons qu'il a quelque chose à voir avec la version en mémoire qui est locale à chaque instance du gestionnaire de cache, mais ne peut tout simplement pas trouver un moyen de tout rassembler.

+1

Entlib est explicitement pas un cache distribué, et n'est pas conçu pour plusieurs utilisateurs mettant à jour le cache. Vous devez utiliser une solution de cache distribuée; nCache possède un gestionnaire de cache de plug-in pour leur cache distribué qui fonctionne avec Entlib. –

+0

Merci Chris ... qui explique le "wierdness" que je voyais ici - http://stackoverflow.com/questions/9822226/sharing-enterprise-library-database-cache-between-multiple-applications/9824587#9824587 –

Répondre

0

Eh bien, c'est à peu près tout. Le cache utilisé par la bibliothèque d'entreprise est en mémoire et les applications Service ASP.NET et Windows ont des espaces mémoire différents. Lorsque vous mettez à jour le cache dans un, vous ne mettez pas à jour le cache dans l'autre.

Le problème existe également dans l'application ASP.NET, mais il semble qu'il s'agisse d'un cache en lecture seule et que vous exécutez les écritures à partir du service.

Ce que vous devez faire est de créer un cache que les deux domaines d'applications peuvent partager et il y a plusieurs façons de le faire:

  • Conserver les articles dans un magasin de persistence partagé (système de fichiers, base de données, etc.) qui les deux domaines d'applications peuvent accéder facilement
  • Avoir un service de cache qui se chargera de la mise à jour des éléments du cache, mais qui vous interrogera (par WCF, par exemple) pour les éléments du cache

en général, vous êtes cherche à effectuer une "mise en cache distribuée". À cette fin, vous devriez lire l'article dans le magazine MSDN intitulé "Distributed Caching On The Path To Scalability" pour plus d'informations sur les options de mise en cache distribuée dans .NET

+0

Merci pour la réponse. Nous n'avons pas réalisé que Entlib n'est pas un cache distribué car de nombreux articles parlent d'utiliser le cache EntLib vs le cache d'Asp.net si vous voulez accéder/mettre à jour le cache de plusieurs applications .. Soooo Confus à propos de la valeur sur EntLib Cache ?? – MindWire

+0

Okie Dokie, nous avons déplacé notre cache à Membase. Vous avez l'air bien jusqu'à présent. Merci à tous ... Ps. Toujours confus à la valeur EntLib mise en cache fournit! – MindWire

+0

Pour être honnête, ce n'est plus beaucoup. Dans Entlib 1.0 jours, la mise en cache Entlib était nécessaire car le cache ASP.NET était uniquement disponible dans les applications Web et les personnes souhaitaient également la mise en cache pour les applications client enrichi. Ces jours-ci avec à peu près tout ce qui est écrit sur les serveurs Web et les applications client une espèce en voie de disparition, ce n'est pas une valeur ajoutée. –

Questions connexes