2013-07-11 2 views
1

Я настраиваю уведомления для своего кейса для приложений. Первая операция добавления отправляет одно уведомление. Но когда я заменю (Обновить) тот же элемент кэша на новое значение или удалю этот элемент, я получаю несколько уведомлений для этой единственной операции. Я подозреваю, что это не имеет никакого отношения к типу операции, которую я выполняю. Потому что я видел несколько дополнительных уведомлений. Есть ли какая-то конфигурация, которую я испортил? Я написал делегата в моем файле кода. Он нажимает на делегата постоянно в течение некоторого времени даже для одиночной операции.Дубликаты Уведомления принимаются в кэшировании приложений

Моя конфигурация:

<dataCacheClient requestTimeout="150000" channelOpenTimeout="19000" maxConnectionsToServer="10"> 
    <localCache isEnabled="true" sync="TimeoutBased" ttlValue="300" objectCount="10000"/> 
    <clientNotification pollInterval="30" maxQueueLength="10000" /> 
    <hosts> 
     <host name="192.10.14.20" cachePort="22233"/> 

    </hosts> 
    <securityProperties mode="None" protectionLevel="None" /> 
    <transportProperties connectionBufferSize="131072" maxBufferPoolSize="268435456" 
         maxBufferSize="8388608" maxOutputDelay="2" channelInitializationTimeout="60000" 
         receiveTimeout="600000"/> 
</dataCacheClient> 

И мой код, который имеет делегат:

public void myCacheLvlDelegate(string myCacheName, string myRegion, string myKey, DataCacheItemVersion itemVersion, DataCacheOperations OperationId, DataCacheNotificationDescriptor nd) 
    { 
     //display some of the delegate parameters 
     StringBuilder ResponseOfCache = new StringBuilder("A cache-level notification was triggered!"); 
     ResponseOfCache.Append(" ; Cache: " + myCacheName); 
     ResponseOfCache.Append(" ; Region: " + myRegion); 
     ResponseOfCache.Append(" ; Key: " + myKey); 
     ResponseOfCache.Append(" ; Operation: " + OperationId.ToString()); 
     string value = ManualDataCacheOperations.GetCacheValue(myTestCache, txtKey.Text).ToString(); 
     Legend.Append(string.Format("{0} - Operation {1} Performed at {2}{3}", myKey, OperationId.ToString(), DateTime.Now.ToShortTimeString(), Environment.NewLine)); 

    } 

Пожалуйста, дайте мне знать, где я пропускаю его ?? Почему он отправляет несколько уведомлений для одного элемента. Если это полезно, я использую кластер с двумя хостами. И использование того же кеша для управления сеансами тоже.

ответ

0

Во-первых, убедитесь, что вы добавили только один обратный вызов. Это просто, но я видел слишком много случаев, когда было добавлено несколько обратных вызовов.

Очень важно понять, что уведомления о кеше основаны на опросе.

Когда вы используете уведомления о кеше, ваше приложение проверяет с кластером кэша с регулярным интервалом (pollInterval), чтобы узнать, доступны ли какие-либо новые уведомления.

Итак, если вы обновите 10 ключей между двумя чеками, вы получите 10 уведомлений.

+0

Спасибо Cybermaxs, Я видел, почему возникает проблема. Я добавляю звонок по каждой операции по ошибке. Тем не менее, есть вторая проблема. После опроса в первый раз приложение получает уведомления почти сразу после следующих операций, а не ждет следующего опроса. Есть идеи?? –