2010-11-30 7 views
0

Nachdem ich monatelang herumgesucht habe, entschied ich mich endlich, dies zu veröffentlichen.Refresh Enterprise Library Cache nach externer App aktualisiert es

Wir haben eine ASP.NET MVC-Anwendung, die Enterprise-Bibliothek zum Zwischenspeichern von Elementen verwendet. Wir verwenden auch einen Windows-Dienst, der diese zwischengespeicherten Objekte regelmäßig aktualisiert. Problem: Wenn der Windows-Dienst die zwischengespeicherten Elemente aktualisiert, sieht die mvc-Website die aktualisierten zwischengespeicherten Elemente erst, wenn wir IIS zurücksetzen. Wir haben darüber nachgedacht, etwas Code in den Dienst zu setzen, um den IIS-Dienst neu zu starten, aber denken, dass es einen besseren Weg geben muss. Es scheint einen anderen Beitrag zu geben, der über das Entfernen von Elementen aus einer externen App spricht, aber es geht nicht weit genug.

Wir denken, dass es etwas mit der In-Memory-Version zu tun hat, die für jede Instanz des Cache-Managers lokal ist, aber einfach keinen Weg findet, alles zusammen zu bringen.

+1

Entlib ist explizit kein verteilter Cache und ist nicht für mehrere Benutzer den Cache aktualisieren entwickelt. Sie müssen eine verteilte Cache-Lösung verwenden. nCache verfügt über einen Plug-in-Cache-Manager für ihren verteilten Cache, der mit Entlib arbeitet. –

+0

Danke Chris ... das erklärt die "Wierdness", die ich hier sah - http://stackoverflow.com/questions/9822226/sharing-enterprise-library-database-cache-between-multiple-applications/9824587#9824587 –

Antwort

0

Nun, das ist es ziemlich viel. Der Cache, der von der Enterprise-Bibliothek verwendet wird, befindet sich im Arbeitsspeicher, und die ASP.NET- und Windows-Dienstanwendungen verfügen über unterschiedliche Speicherbereiche. Wenn Sie den Cache in einem aktualisieren, aktualisieren Sie den Cache in dem anderen nicht.

Das Problem existiert auch in der ASP.NET-App, aber es scheint, dass dies ein schreibgeschützter Cache ist und Sie die Schreibvorgänge vom Dienst durchführen.

Was Sie tun müssen, ist, einen Cache erstellen, die beiden Anwendungsdomänen gemeinsam nutzen können und es gibt viele Möglichkeiten, dies zu tun:

  • Speichern Sie die Einzelteile in einem gemeinsamen persistance Speicher (Dateisystem, Datenbank, etc.), das beide App-Domains können leicht zugänglich machen
  • Haben Sie einen Cache-Dienst, der die Updates der Cache-Elemente behandelt, die man aber (durch WCF, zum Beispiel) für die Cache-Einträge

Im allgemeinen abfragt, sind Sie "verteiltes Caching" durchführen. Zu diesem Zweck sollten Sie den Artikel im MSDN Magazin mit dem Titel "Distributed Caching On The Path To Scalability" für weitere Informationen zu verteilten Caching-Optionen in .NET lesen.

+0

Danke für die Antwort. Wir wussten nicht, dass Entlib kein verteilter Cache ist, da viele Artikel über die Verwendung von EntLib Cache vs Asp.net Cache sprechen, wenn Sie auf den Cache von mehreren Apps zugreifen/updaten möchten. Soooo Confuzed über den Wert auf EntLib Cache? – MindWire

+0

Okie Dokie, wir haben unseren Cache zu Membase verschoben. Sieht so gut aus. Danke an alle ... Ps. Immer noch verwirrt beim EntLib Caching bietet! – MindWire

+0

Um ehrlich zu sein, es ist nicht mehr viel. In den Entlib 1.0 Tagen war das Entlib-Caching notwendig, weil der ASP.NET-Cache NUR in Web-Apps verfügbar war und die Leute auch Caching für Rich-Client-Apps wollten. In diesen Tagen, in denen fast alles auf Webservern und Client-Apps als bedrohte Art geschrieben wird, ist es nicht so sehr wertschöpfend. –

Verwandte Themen