2014-05-20 33 views
5

Sto tentando di memorizzare nella cache alcuni dei miei costosi per generare grafici. Quindi ho fatto questo in Web.config:ASP.NET OutputCache varyByParam non funziona in Web.config

<caching> 
    <outputCacheSettings> 
     <outputCacheProfiles> 
      <!-- 4 hours : 60 sec x 60 min x 4 hour = 14400 sec --> 
      <add name="ChartCacheProfile" duration="14400" varyByParam="none" /> 
     </outputCacheProfiles> 
    </outputCacheSettings> 
</caching> 

E ho aggiunto questo nel mio Controller:

[OutputCache(CacheProfile="ChartCacheProfile")] 
public ActionResult GenerateChart() 

Ma questo non funziona ..., il risultato non è ancora memorizzato nella cache e il Action è in esecuzione sempre. Questo può richiedere fino a 1 minuto per il completamento.

Si prega di notare che l'url viene chiamato con parametri diversi ogni volta. Il parametro non è correlato al grafico generato. Questo è il motivo per cui ho inserito varyByParam="none".

+0

Cosa intendi con "Non funziona"? Ulteriori chiamate all'URL vengono restituite dalla cache o inserite nell'azione? – haim770

+0

Quando si aggiorna senza modificare alcun parametro, colpisce ancora l'azione? – haim770

+0

Quando aggiorno senza modificare il parametro, non ha colpito l'azione (è il caching!). Quando sposto 'varyByParam =" none "' a 'Controller' invece di' Web.config' la cache funziona .. Sospetto che questo sia un bug. –

risposta

5

Sospetto che sia davvero un errore. Che cosa ha funzionato per me è quello di impostare VaryByParam esplicitamente l'attributo OutputCache:

[OutputCache(CacheProfile="ChartCacheProfile", VaryByParam="None")] 
public ActionResult GenerateChart() 
+4

https://github.com/aspnetwebstack/aspnetwebstack/blob/master/src/System.Web.Mvc/OutputCacheAttribute.cs#L23 potrebbe essere la ragione. – haim770

+0

Quindi questo è un bug o di progettazione? –

+0

Difficile dirlo ... – haim770

Problemi correlati