2012-11-06 11 views
5

Sto tentando di ricreare la maggior parte delle funzionalità del filtro di azione OutputCache in MVC 4 memorizzando nella cache gli oggetti risultato. Il motivo per cui non voglio utilizzare il filtro di azione OutputCache è perché non posso utilizzarlo con AppFabric e viste parziali; le viste parziali vengono sempre archiviate in MemoryCache e voglio che gli oggetti memorizzati nella cache vengano utilizzati in una server farm.Caching delle visualizzazioni MVC in AppFabric manualmente

Il primo problema che ho è

{"Type 'System.Web.Mvc.TempDataDictionary' cannot be serialized. 
Consider marking it with the DataContractAttribute attribute, and marking all of 
its members you want serialized with the DataMemberAttribute attribute. 
If the type is a collection, consider marking it with the 
CollectionDataContractAttribute. See the Microsoft .NET Framework documentation for 
other supported types."} 

Questo mi fa chiedo se devo cache di qualcos'altro per restituire ciò che è essenzialmente la vista alla fine. Qualcuno ha un'idea di cosa dovrei memorizzare nella cache invece di ricreare la vista o un approccio diverso per la memorizzazione nella cache di viste parziali su una server farm? Non voglio usare plugin di terze parti per questo.

Grazie

Aggiornamento: Ho iniziato la memorizzazione nella cache la rappresentazione di stringa di vista parziale in questo modo:

using (StringWriter sw = new StringWriter()) 
     { 
      ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, "ViewName"); 
      ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); 
      viewResult.View.Render(viewContext, sw); 
      view = sw.GetStringBuilder().ToString(); 
     } 

Questo ha reso facile per recuperare solo la stringa nella cache e restituirlo come contenuto nella azione. Sto ancora cercando altri suggerimenti o un modo migliore per farlo.

risposta

0

Forse un po 'tardi, ma lascia che condivida con te la mia esperienza.

Mentre ASP.NET MVC è basato sul framework ASP.NET, presenta alcune differenze piuttosto significative che hanno reso piuttosto difficile il riutilizzo delle funzionalità ASP.NET in MVC. Sei vero: il caching dell'output a pagina intera e il caching dell'output delle pagine parziali sono implementati in modi completamente diversi. Un altro blog post di Greg Roberts suggerisce che ci sono molti problemi con l'output in MVC. È stato così utile in WebForms!

Ecco perché mi sono rivolto a MvcDonutCaching (Nuget). Ha risolto molti dei nostri problemi. Si prega di leggere l'introduzione here o su codeplex.

La buona notizia per voi è che MvcDonutCaching è anche completamente compatibile con AppFabric Caching; DevTrends ha pubblicato un article alcuni mesi fa. Ciò significa che è possibile utilizzare il nuovo Output Cache Provider (incluso in AppFabric 1.1).

L'aggiunta di questo nuovo provider è abbastanza semplice come aggiungere un riferimento e modificare la configurazione in questo modo.

<caching> 
    <outputCache defaultProvider="DistributedCache"> 
    <providers> 
     <add name="DistributedCache" 
      type="Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache" 
      cacheName="default" 
      dataCacheClientName="default" /> 
    </providers> 
    </outputCache> 
</caching> 

Spero che questo ti aiuti, perché ci aiuta molto!

Problemi correlati