2012-11-06 26 views
5

Tôi đang cố gắng tạo lại hầu hết các chức năng của bộ lọc hành động OutputCache trong MVC 4 bằng cách lưu vào bộ nhớ cache các đối tượng kết quả xem bản thân mình. Lý do tôi không muốn sử dụng bộ lọc hành động OutputCache là vì tôi không thể sử dụng nó với khung nhìn AppFabric và một phần; xem một phần luôn được lưu trữ trong MemoryCache và tôi muốn các đối tượng được lưu trữ được sử dụng trên một trang trại máy chủ.Xem các chế độ xem MVC trong AppFabric theo cách thủ công

Vấn đề đầu tiên tôi có là

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

Điều này làm cho tôi tự hỏi, nếu tôi nên bộ nhớ cache cái gì khác để trả lại những gì cơ bản là quan điểm ở cuối. Có ai có một ý tưởng về những gì tôi nên bộ nhớ cache thay vì để tạo lại xem hoặc một cách tiếp cận khác nhau để bộ nhớ đệm một phần quan điểm trên một trang trại máy chủ? Tôi không muốn sử dụng plugin của bên thứ ba cho việc này.

Cảm ơn

Cập nhật: Tôi bắt đầu nhớ đệm chuỗi đại diện của quan điểm từng phần như sau:

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

này đã làm cho nó dễ dàng để chỉ lấy các chuỗi trong bộ nhớ cache và gửi lại như nội dung trong hoạt động. Tôi vẫn đang tìm kiếm các đề xuất khác hoặc cách tốt hơn để thực hiện việc này.

Trả lời

0

Có thể hơi muộn nhưng hãy để tôi chia sẻ với bạn kinh nghiệm của tôi.

Trong khi ASP.NET MVC được xây dựng trên khuôn khổ ASP.NET, nó có một số khác biệt khá đáng kể đã làm cho việc tái sử dụng các tính năng ASP.NET khá khó khăn trong MVC. Bạn đang thực sự: toàn bộ trang đầu ra bộ nhớ đệm và bộ đệm đầu ra một phần trang được thực hiện theo những cách hoàn toàn khác nhau. Một blog post khác từ Greg Roberts cho thấy có nhiều vấn đề với Đầu ra trong MVC. Nó rất hữu ích trong WebForms!

Đó là lý do tại sao tôi tự biến mình thành MvcDonutCaching (Nuget). Nó đã giải quyết được nhiều vấn đề của chúng ta. Vui lòng đọc phần giới thiệu here hoặc trên codeplex.

Tin tốt cho bạn là MvcDonutCaching cũng hoàn toàn tương thích với AppFabric Caching; DevTrends đã đăng một số article cách đây vài tháng. Điều này có nghĩa là bạn có thể sử dụng Nhà cung cấp bộ nhớ cache đầu ra mới (được đóng gói trong AppFabric 1.1).

Việc thêm nhà cung cấp mới này khá đơn giản như thêm tham chiếu và thay đổi cấu hình theo cách này.

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

Hy vọng điều này sẽ giúp bạn, bởi vì nó giúp chúng tôi rất nhiều!

Các vấn đề liên quan