Общие исключения
При возникновении ошибки во время кэширования вызова клиентского метода клиент кэша вызывает экземпляр класса DataCacheException. Тип ошибки содержится в свойстве ErrorCode.
В каждом интерфейсе API клиента кэша могут возникнуть следующие общие ошибки:
В коде приложения должны учитываться эти ошибки. В приведенных ниже сведениях содержатся подробные описания каждой ошибки, которые позволят обрабатывать их надлежащим образом.
Timeout
При истечении времени ожидания вызывается объект DataCacheException с кодом ошибки Timeout. Истечение времени ожидания указывает, что клиент кэша не получил ответ от одного из серверов в пределах указанного времени ожидания. Это может быть вызвано рядом неполадок, например разрывом связи между клиентом и сервером.
Необходимо отметить, что даже при истечении времени ожидания сервер может успешно обработать запрос. Например, в приложении используется клиент кэша со значением requestTimeout
, равным 10000 миллисекундам. Приложение вызывает процедуру Add API для добавления нового элемента кэша. Если вызов занимает более десяти секунд, приложение получает ошибку истечения времени ожидания. Однако сервер мог завершить операцию добавления, но затем не смог ответить клиенту до истечения времени ожидания. При создании обработчика этой ошибки следует учесть возможность возникновения подобной ситуации. Если обработчик события вновь пытается добавить объект, это может привести к другому исключению с кодом ошибки KeyAlreadyExists.
В зависимости от требований к приложению можно удлинить или укоротить время ожидания клиента кэша. Дополнительные сведения о настройке времени ожидания см. в разделе Настройка времени ожидания клиента кэша.
RetryLater
Код ошибки RetryLater указывает, что кластер кэша временно недоступен и не может обработать запрос. Например, эта ошибка может возникать в том случае, если администратор настраивает кластер кэша.
При ошибке такого типа важно наблюдать за значением свойства SubStatus объекта DataCacheException. Это свойство предоставляет дополнительные сведения, которые могут объяснить причину возникновения неполадки. Например, если кластер кэша остановлен, вызванное исключение DataCacheException будет иметь значение свойства ErrorCode, равное RetryLater, и значение свойства SubStatus, равное CacheServerUnavailable. Следует заметить, что это же значение SubStatus может наблюдаться, если учетная запись Windows, связанная с запросом, не разрешена в кластере кэша, или если брандмауэры в узлах кэша не были настроены должным образом.
Код ошибки RetryLater может также возникать, когда на одном или нескольких целевых серверах недостаточно доступной памяти. В такой ситуации свойство SubStatus устанавливается в значение Throttled. Существуют определенные факторы, которые могут способствовать регулированию сервера кэширования.
Проверьте параметры кэша с помощью команды
get-cacheconfig
Windows Powershell. Найдите кэши, у которыхEvictionType
установлен в значениеNone
вместоLRU
. Если вытеснение отключено, то кластер кэша не может вытеснять кэшированные элементы в случае нехватки памяти на сервере.С помощью диспетчера задач Windows или системного монитора найдите другие процессы на серверах кэширования, которые могут использовать доступную память.
Проверьте использование кэша приложением. Средняя скорость вставленных объектов, их размер, а также их значения времени ожидания вносят свой вклад в общий объем памяти, требуемый в кластере кэша.
Следует рассмотреть возможность использования настраиваемых областей. Область размещается только на одном сервере кэширования, поэтому все элементы в области не могут распределяться по всем узлам кэша. Если на одном сервере кэширования размещена хотя бы одна большая область, то сервер может быть в состоянии регулирования, даже если на остальных серверах кэширования имеется доступная память.
ConnectionTerminated
Код ошибки ConnectionTerminated указывает, что подключение клиента кэша и кластера кэша было прервано. Причин возникновения этой ошибки может быть несколько, включая сетевые ошибки или выключенные серверы кэша. Как и при ошибках, связанных с истечением времени ожидания, ошибка ConnectionTerminated не отражает результат выполнения затребованной операции. В обработчике ошибки должны быть учтены обе возможности.
См. также
Основные понятия
Общие сведения об обработке исключений
2012-03-05