Windows Server Appfabric провайдер для кэширования вывода asp.net - PullRequest
0 голосов
/ 18 октября 2011

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

1 Ответ

2 голосов
/ 18 октября 2011

Нет.Но поскольку кэширование вывода в 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

...