2009-08-07 6 views
4

J'ai deux applications ASP.NET 2.0 dans IIS; un système de réservation publique et un système d'administration pour gérer les prix. Il existe un projet DLL partagé qui accède à la base de données, utilisée par les deux applications.Partage d'un HttpRuntime.Cache entre deux applications IIS

Pour améliorer les performances, les prix sont mis en cache dans le code DLL pour enregistrer la frappe de la base de données à chaque demande. Cependant, lorsque l'administrateur modifie les prix, le cache est actualisé sur l'application d'administration (et évidemment il n'est pas actualisé sur l'application publique)

Donc, à la question. Est-il possible de configurer IIS afin que ces deux applications partagent le HttpRuntime.Cache? Si oui, comment devrait-il être mis en place?

Répondre

2

Cela aurait battu le point d'avoir deux applications - ils ne devraient pas partager le même tas de mémoire DLL, ce serait nécessaire. Ce dont vous avez besoin est un canal de communication entre les deux et que les pages Web d'administration notifient les modifications apportées au cache, ce qui provoquerait une actualisation.

Peut-être quelque chose de simple, mais peut-être une simple page à laquelle vous envoyez des messages pour que le cache vérifie les mises à jour? Ou - demandez à l'application de vérifier les mises à jour de temps en temps en fonction d'un horodatage.

(Une autre option est de créer un service où le cache réside, mais je pense que c'est en dehors du cadre d'une solution simple)

+0

Merci Thies. C'est ce que je soupçonnais. J'ai déjà ajouté un gestionnaire générique au site public qui est appelé par le site d'administration, mais je me demandais s'il y avait une manière plus simple. – harriyott

0

Non; par expérience cela ne fonctionnera pas (.NET 4.6, IIS 8.5, 2 applications une DLL commune en utilisant le même pool d'applications). Documentation est très difficile à trouver (au-delà de "cache items are stored in memory") - en fait la seule partie descriptive était what @Thies stated above - mais comme il a déclaré je crois que c'est parce que le cache est stocké dans la mémoire allouée de la DLL, par conséquent (puisque nous avons encore one process but two app domains) DLL est chargé séparément dans deux domaines d'application et la mémoire de la DLL n'est pas partagée.

Questions connexes