2012-11-06 10 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 Cachingと完全に互換性があります。 DevTrendsは数ヶ月前にarticleと投稿しました。つまり、新しい出力キャッシュプロバイダ(AppFabric 1.1でicluded)を使用できます。

この新しいプロバイダを追加することは、リファレンスを追加してこのように設定を変更することと同じくらい簡単です。

希望があれば、これは私たちの多くを助けます。

関連する問題