Расширение класса DataCacheStoreProvider (кэширование в AppFabric 1.1)

В этом разделе описывается создание поставщика со сквозным чтением или задержкой записи для Кэш Windows Server AppFabric. Поставщик создается путем реализации абстрактного базового класса DataCacheStoreProvider.

Создание проекта поставщика

  1. В Visual Studio 2010 создайте новый проект библиотеки классов.

  2. Добавьте ссылку на сборку Microsoft.ApplicationServer.Core.dll. По умолчанию она расположена в папке \Program Files\Windows Server AppFabric.

  3. Откройте исходный файл проекта (Class1.cs или Class1.vb в зависимости от языка проекта).

  4. В начале исходного файла добавьте оператор "using" ("Imports" в Visual Basic) для пространства имен Microsoft.ApplicationServer.Caching.

    using Microsoft.ApplicationServer.Caching;
    
    Imports Microsoft.ApplicationServer.Caching
    
  5. Измените класс, чтобы он наследовал от DataCacheStoreProvider. Обратите внимание, что редактор кода Visual Studio 2010 позволяет автоматически создать пустые функции в классе. В Visual C# щелкните класс DataCacheStoreProvider правой кнопкой мыши и выберите команду Реализовать абстрактный класс. В Visual Basic нажмите клавишу ВВОД после строки с оператором "Inherits".

    namespace RTProvider
    {
        public class Provider : DataCacheStoreProvider
    
    Public Class Provider
        Inherits DataCacheStoreProvider
    
  6. Подпишите сборку строгим именем, чтобы установить ее в глобальном кэше сборок. В обозревателе решений щелкните правой кнопкой мыши имя проекта и выберите пункт Свойства. В разделе свойств проекта Подписывание установите флажок Подписать сборку. В раскрывающемся списке Выберите файл ключа строгого имени: выберите существующий файл или пункт <Создать...>, чтобы создать новый.

Добавление открытого конструктора

Поставщик должен предоставлять открытый конструктор со следующей сигнатурой:

public ProviderClass(string cacheName, Dictionary<string,string> config)

Замените ProviderClass в приведенном примере на имя своего класса, реализующего методы DataCacheStoreProvider. Этот конструктор вызывается, когда на работающем узле кэша впервые включается сквозное чтение или запись с задержкой. Он также вызывается при каждом перезапуске узла кэша. Конструктор принимает следующие два параметра:

Параметр Описание

cacheName

Это значение типа string представляет собой имя кэша, связанного с поставщиком. Имя можно сохранить для использования в будущем. Например, его нужно знать при создании новых объектов DataCacheItem в ответ на запросы чтения.

config

Этот объект типа Dictionary<string,string> содержит параметры конфигурации поставщика. Их набор меняется от поставщика к поставщику и потребностей их настройки во время выполнения. Они передаются через параметр ProviderSettings команд Windows Powershell New-Cache или Set-CacheConfig.

Реализация методов поставщика

Поставщик должен реализовывать методы класса DataCacheStoreProvider. Обратите внимание, что при создании поставщика со сквозным чтением не требуется реализовывать методы записи. АНалогично, что при создании поставщика с задержкой записи не требуется реализовывать методы чтения.

Имена методов в целом описывают их назначение. В следующей таблице описаны методы (перегрузки не указаны).

Метод Описание

Read

Вызывается, когда клиент кэша запрашивает из кэша элемент, которого сейчас нет в связанном кэше.

Write

Вызывается для элементов, которые клиенты кэша недавно добавили или изменили в кэше.

Delete

Вызывается, когда клиент кэша удаляет элемент из связанного кэша.

Dispose

Ликвидирует поставщик.

Есть два метода чтения. Первому методу чтения передается параметр DataCacheItemKey, указывающий на возвращаемый элемент. Другой перегрузке передается коллекция объектов DataCacheItemKey, которые она должна извлечь и вернуть в виде Dictionary из объектов DataCacheItemKey и DataCacheItem. Этот объект словаря изначально пуст, и считанные элементы должны быть добавлены в него перед возвратом из метода. Обратите внимание, что для создания запрошенных элементов используется класс DataCacheItemFactory, как в следующем примере.

DataCacheItem dataCacheItem = DataCacheItemFactory.GetCacheItem(key, CACHE_NAME, objectValue, null);

В приведенном примере вместо строки CACHE_NAME следует задать имя кэша, ранее переданное в перегруженный конструктор. Ключ key – это запрашиваемый DataCacheItemKey. objectValue – это объект, который следует возвращать клиентам по этому ключу кэша.

Аналогично, есть два метода для записи. Первому методу записи передается объект DataCacheItem. Обратите внимание, что свойство Key этого объекта содержит связанный ключ DataCacheItemKey, а свойство Value содержит значение. Второму методу записи передается параметр Dictionary из объектов DataCacheItemKey и DataCacheItem.

Важно!

Важно удалять элементы из объекта Dictionary<DataCacheItemKey, DataCacheItem> по мере их записи в фоновое хранилище. Если элементы не удалять, кэш сочтет запись неудачной и повторит операцию позже.

Обработка ошибок

При наличии ошибок можно породить исключение типа DataCacheStoreException. Результат исключения зависит от того, происходит оно в методах Read или Write. Различия описаны в следующей таблице.

Метод Результат порождения исключения

Read

Клиент кэша, выполняющий чтение, получает исключение DataCacheException со свойством ErrorCode, равным DataCacheErrorCode.ReadThroughProviderFailure (текст описания исключения содержит код "<ERRCA0025>").

Write

Запись считается неудавшейся и будет повторена согласно политике повтора операций с задержкой записи в кэше. Клиент кэша не уведомляется об этой ошибке.

Есть три возможных значения DataCacheErrorCode, которые клиент кэша может получить при вызове DataCache.Get с доступом к поставщику со сквозным чтением.

  1. DataCacheErrorCode.ReadThroughProviderFailure

  2. DataCacheErrorCode.ReadThroughProviderDidNotReturnResult

  3. DataCacheErrorCode.ReadThroughProviderNotFound

Также следует заметить, что время, проведенное в методах чтения поставщика, добавляется к общему времени запроса в методе DataCache.Get. В силу этого может потребоваться увеличить время ожидания запросов, чтобы скомпенсировать задержки, создаваемые вашим поставщиком. Дополнительные сведения см. в разделе Настройка времени ожидания клиента кэша (кэширование в Windows Server AppFabric).

Тестирование и отладка поставщика

Для разработки и тестирования рекомендуется создать на компьютере разработчика кластер кэша с одним узлом. Это позволяет быстро перестраивать и заново добавлять сборку в глобальный кэш сборок, а также перезапускать локальный кластер кэша. Далее описано, как вести отладку поставщика.

  1. Откройте проект поставщика в Visual Studio 2010.

  2. В меню Отладка выберите команду Присоединиться к процессу....

  3. Установите флажки Показать процессы, запущенные всеми пользователями и Показать процессы во всех сеансах.

  4. Выберите процесс DistributedCacheService.exe.

  5. Нажмите кнопку Присоединить.

  6. Создайте точки останова в коде поставщика и выполняйте в другом приложении операции, приводящие к вызову методов поставщика.

Предупреждение

Остановка сеанса отладки без отсоединения отладчика приведет к остановке службы кэша на компьютере. Это приведет к потере всех данных в кэше на этом компьютере.

См. также

Основные понятия

Развертывание поставщика сквозного чтения или записи с задержкой (кэширование в AppFabric 1.1)
Включение сквозного чтения и записи с задержкой в кэше (кэширование в AppFabric 1.1)

  2012-03-05