Frage

Ich möchte bestimmte Objekte zwischen Anwendung neu gestartet wird beibehalten können.

Um das zu tun, möchte ich schreiben spezifische zwischengespeicherten Elemente auf die Festplatte in Global.asax Application_End() Funktion und re-load sie wieder auf Application_Start().

Im Moment habe ich eine Cache-Helper-Klasse, die die folgende Methode verwendet den zwischengespeicherten Wert zurück:

return HttpContext.Current.Cache[key];

Problem :. Während Application_End(), HttpContext.Current ist null, da es keine Web-Anfrage (es ist ein automatisiertes Reinigungsprozedur) - daher kann ich nicht Zugang .Cache[] eines der Elemente zum Abrufen auf der Festplatte speichern

Frage : Wie kann ich die Cache-Gegenstände bei Application_End() Zugriff

War es hilfreich?

Lösung

Wenn Sie Zugriff auf Cache-Objekt erhalten möchten, bevor sie entsorgt werden, müssen Sie some wie diese verwenden Objekt-Cache hinzuzufügen:

Import Namespace System.Web.Caching Ihrer Anwendung, wo Sie Hinzufügen von Objekten zu Cache verwenden.

//Add callback method to delegate
var onRemove = new CacheItemRemovedCallback(RemovedCallback);

//Insert object to cache
HttpContext.Current.Cache.Insert("YourKey", YourValue, null, DateTime.Now.AddHours(12), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, onRemove);

Und wenn dieses Objekt wird angeordnet sein wird folgende Verfahren genannt werden:

private void RemovedCallback(string key, object value, CacheItemRemovedReason reason)
{
    //Use your logic here

    //After this method cache object will be disposed
}

Andere Tipps

Ich fordere Sie dringend Ihren Ansatz zu überdenken. Vielleicht möchten Besonderheiten beschreiben, was wollen Sie tun, so dass wir Ihnen dabei helfen können. Aber wenn Sie auf sie völlig eingestellt, dann können Sie einfach Werte speichern auf der Festplatte, wenn Sie sie tatsächlich eingestellt, das heißt die Helfer Klasse würde in etwa so aussieht:

public static class CacheHelper
{
    public static void SetCache(string key, object value)
    {
        HttpContext.Current.Cache[key] = value;
        if (key == "some special key")
            WriteValueOnDisk(value);
    }
}

Sie können den Cache durch HttpRuntime.Cache zugreifen, wenn Sie nicht über ein Httpcontext zur Verfügung haben. Doch bei Application_End, ich glaube, der Cache ist bereits gespült.

Die Lösung Dima Shmidt Umrisse wäre der beste Ansatz im Cache befindlichen Werte zu speichern. Das ist durch Ihre Artikel Cache mit einem CacheItemRemovedCallback Hinzufügen und speichert die Werte auf der Festplatte gibt.

Als alternative Lösung könnten Sie die Daten in Anwendungsobjekt speichern (Application [key]) oder einfach ein static class erstellen und verwenden sie Ihre Daten im App zu halten - in diesem Fall würden die Daten auf Application_End zur Verfügung Sill

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top