Поставщик Windows Server Appfabric для кэширования вывода asp.net

Существует ли поставщик кэша вывода asp.net для Windows Server AppFabric 1.0?


person Syam    schedule 18.10.2011    source источник


Ответы (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

person PhilPursglove    schedule 18.10.2011