2009-01-26 12 views
1

J'ai deux applications - l'une est un site Web asp.net et l'autre est un service Windows. Les deux applications font référence à ma couche de gestion (projet de bibliothèque), qui référence elle-même ma couche d'accès aux données (projet de bibliothèque) qui utilise elle-même le bloc d'application de données de la bibliothèque d'entreprise.Un cache pour diverses applications?

actuellement l'objet i utiliser System.Web.Caching.Cache dans mon BL pour mettre en cache certains de mes objets:

public static System.Web.Caching.Cache Cache 
    { 
     get 
     { 
      if(cache == null) 
      { 
       if (System.Web.HttpContext.Current != null) 
       { 
        //asp.net 
        cache = System.Web.HttpContext.Current.Cache; 
       } 
       else 
       { 
        //windows service 
        cache = System.Web.HttpRuntime.Cache; 
       } 
      } 
      return cache; 
     } 
    } 

que les deux applications sont en cours d'exécution sur leur propre - ils utilisent tous deux un objet cache séparé par eux-mêmes - et c'est le problème en fait:

si je change un objet sur le site Web asp.net et l'enregistre dans la base de données. l'objet de cette clé de cache est retiré du cache - le cache de l'application asp.net! C'est très bien.

mais le cache du service Windows devient obsolète!

vice-versa

est-il possible que les deux applications utilisent le même cache? Un cache pour les deux applications?

la seule option que j'ai je pense est que je vais devoir utiliser SqlDependency avec

Sql Server 2005 Notification-based Cache Invalidation

est-il une autre façon?

EDIT: je viens de trouver http://www.codeplex.com/SharedCache. Je vais essayer. car la vélocité sera dans le statut de candidat à la publication jusqu'au milieu de l'année 2009.

Répondre

7

Vous devriez jeter un oeil significatif au nouveau cache libre distribué de Microsoft "Velocity".

Voici un podcast que je l'ai fait sur le sujet: http://www.hanselman.com/blog/HanselminutesPodcast116DistributedCachingWithMicrosoftsVelocity.aspx

Voilà des détails sur MSDN: http://msdn.microsoft.com/en-us/data/cc655792.aspx

Voici les téléchargements et les échantillons: http://code.msdn.microsoft.com/velocity

+1

Props to Scott, mais la vitesse n'est pas prête pour l'environnement de production de n'importe qui. – jro

+0

J'entends ce que vous dites, mais Velocity est en production partout. Cela dit, il y a aussi memcached et d'autres solutions tierces. –

0

Cache est seulement bon pour App domaine. Apparemment, vous ne pouvez pas partager le même cache entre une application Web et un service Web. Donc ... vous devez synchroniser 2 caches de différentes manières. L'ajout d'un objet de dépendance de cache dans vos caches, une fois les données modifiées, invalide les éléments du cache et recharge l'objet en cache. Vous pouvez utiliser Polling ou QN (performances bien meilleures) en tant que mécanisme de dépendance de cache.

Questions connexes