2012-11-06 2 views
5

뷰 결과 개체를 직접 캐싱하여 MVC 4에서 OutputCache 작업 필터의 기능을 대부분 다시 만들려고합니다. OutputCache 액션 필터를 사용하고 싶지 않은 이유는 AppFabric 및 부분 뷰와 함께 사용할 수 없기 때문입니다. 부분 뷰는 항상 MemoryCache에 저장되며 캐시 된 개체를 서버 팜에서 사용하기를 원합니다.AppFabric에서 MVC 뷰를 수동으로 캐싱

내가 가진 첫 번째 문제는이 나는 기본적으로 마지막에보기 무엇을 반환하는 다른 뭔가를 캐시할지 궁금한데

{"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."} 

이다. 누구나 서버 팜을 통해 부분 뷰를 캐시하기 위해 뷰를 다시 작성하거나 다른 접근 방식을 다시 작성하기 위해 캐시해야 할 사항이 있습니까? 나는 이것을 위해 써드 파티 플러그인을 사용하고 싶지 않다.

감사

업데이트 : 이것은했다

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(); 
     } 

쉽게 단지 캐시에있는 문자열을 검색하고 콘텐츠로 반환 : 그래서 같은 부분보기의 문자열 표현을 캐시 시작 동작. 나는 아직도 이것을하기위한 다른 제안이나 더 좋은 방법을 찾고있다.

답변

0

조금 늦었을 지 모르지만 내 경험을 들려주고 싶습니다.

ASP.NET MVC는 ASP.NET 프레임 워크 위에 구축되었지만 MVC에서는 다소 어려웠던 ASP.NET 기능을 재사용 할 수있는 몇 가지 중요한 차이점이 있습니다. 사실입니다 : 전체 페이지 출력 캐싱과 부분 페이지 출력 캐싱은 전혀 다른 방식으로 구현됩니다. Greg Roberts의 blog post은 MVC에서 Output에 많은 문제가 있음을 나타냅니다. 그것은 WebForms에서 매우 유용했습니다!

그래서 MvcDonutCaching (Nuget)으로 바뀌 었습니다. 그것은 우리의 많은 문제를 해결했습니다. 소개 here 또는 codeplex을 읽어보십시오.

당신에게 좋은 소식은 MvcDonutCaching도 AppFabric 캐싱과 완벽하게 호환된다는 것입니다. DevTrends는 몇 달 전 article이라는 글을 게시했습니다. 즉, 새로운 출력 캐시 공급자 (AppFabric 1.1에서 icluded)를 사용할 수 있습니다.

이 새 공급자를 추가하는 것은 참조를 추가하고이 방법으로 구성을 변경하는 것처럼 간단합니다.

희망 사항은 도움이 될 것입니다.