Domanda

Voglio essere in grado di mantenere alcuni oggetti tra riavvio dell'applicazione.

Per fare questo, voglio specifici scrittura elementi memorizzati nella cache su disco in funzione Application_End() Global.asax e ri-load di nuovo sul Application_Start().

Al momento ho una classe cache helper, che utilizza il seguente metodo per restituire il valore memorizzato nella cache:

return HttpContext.Current.Cache[key];

problema :. Durante Application_End(), HttpContext.Current è nullo in quanto non v'è alcuna richiesta web (si tratta di una procedura di pulitura automatica) - quindi, non posso accedere .Cache[] per recuperare una delle voci per salvare su disco

Domanda :? Come posso accedere alle voci della cache durante Application_End()

È stato utile?

Soluzione

Se si desidera ottenere l'accesso a oggetto cache prima che possa essere smaltito, è necessario utilizzare somethink come questo per aggiungere oggetto per la cache:

Importa namespace System.Web.Caching alla vostra applicazione in cui si sta utilizzando oggetti aggiungendo alla cache.

//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);

E quando questo oggetto sarà disposta sarà chiamata seguente metodo:

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

    //After this method cache object will be disposed
}

Altri suggerimenti

Io vi esorto a riconsiderare il vostro approccio. Si consiglia di descrivere le specifiche di quello che stai cercando di fare, in modo che possiamo aiutare con quello. Ma se siete totalmente impostato su di esso, allora si può semplicemente salvare i valori su disco se ne hai effettivamente imposta, vale a dire la vostra classe di supporto sarebbe simile a questa:

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

È possibile accedere alla cache attraverso HttpRuntime.Cache quando non si dispone di un HttpContext disponibili. Tuttavia, a Application_End, credo che la cache viene già lavata.

contorni

??La soluzione Dima Shmidt sarebbe l'approccio migliore per memorizzare i valori memorizzati nella cache. Cioè aggiungendo i tuoi articoli alla cache con un CacheItemRemovedCallback, e memorizzare i valori su disco lì.

Come soluzione alternativa è possibile memorizzare i dati in oggetto Application (Application [tasto]) o semplicemente creare un static class e utilizzarlo per mantenere i vostri dati all'interno di app - in questo caso i dati sarebbero davanzale essere disponibili su Application_End

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top