Существует ли поставщик кэша вывода asp.net для Windows Server AppFabric 1.0?
Поставщик Windows Server Appfabric для кэширования вывода asp.net
Ответы (1)
Нет. Но поскольку кэширование вывода подключается в ASP.NET 4.0 (используя модель поставщика), вы можете написать свое собственное.
Чтобы создать новый поставщик выходного кэша, вам нужно будет наследоваться от System.Web.Caching.OutputCacheProvider
, вам нужно будет сослаться на System.Web
и System.Configuration
.
Тогда это в основном случай переопределения четырех методов из базового поставщика: Add, Get, Remove и Set.
Поскольку ваш сайт, вероятно, будет получать довольно много посещений, вы определенно захотите использовать Singleton для DataCacheFactory, этот код использует одноэлементный шаблон Джона Скита (при условии, что я правильно его понял).
using System;
using System.Web.Caching;
using Microsoft.ApplicationServer.Caching;
namespace AppFabricOutputCache
{
public sealed class AppFabricOutputCacheProvider : OutputCacheProvider
{
private static readonly AppFabricOutputCacheProvider instance = new AppFabricOutputCacheProvider();
private DataCacheFactory factory;
private DataCache cache;
static AppFabricOutputCacheProvider()
{ }
private AppFabricOutputCacheProvider()
{
// Constructor - new up the factory and get a reference to the cache based
// on a setting in web.config
factory = new DataCacheFactory();
cache = factory.GetCache(System.Web.Configuration.WebConfigurationManager.AppSettings["OutputCacheName"]);
}
public static AppFabricOutputCacheProvider Instance
{
get { return instance; }
}
public override object Add(string key, object entry, DateTime utcExpiry)
{
// Add an object into the cache.
// Slight disparity here in that we're passed an absolute expiry but AppFabric wants
// a TimeSpan. Subtract Now from the expiry we get passed to create the TimeSpan
cache.Add(key, entry, utcExpiry - DateTime.UtcNow);
}
public override object Get(string key)
{
return cache.Get(key);
}
public override void Remove(string key)
{
cache.Remove(key);
}
public override void Set(string key, object entry, DateTime utcExpiry)
{
// Set here means 'add it if it doesn't exist, update it if it does'
// We can do this by using the AppFabric Put method
cache.Put(key, entry, utcExpiry - DateTime.UtcNow);
}
}
}
После того, как вы написали это, вам нужно настроить приложение для использования его в вашем web.config:
<system.web>
<caching>
<outputCache defaultProvider="AppFabricOutputCache">
<providers>
<add name="AppFabricOutputCache" type="AppFabricOutputCache, AppFabricOutputCacheProvider" />
</providers>
</outputCache>
</caching>
</system.web>
MSDN: OutputCacheProvider
Блог СкоттГу о создании OutputCacheProviders