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.