Caching appfabric缓存中接收到重复的通知

Caching appfabric缓存中接收到重复的通知,caching,notifications,duplicates,appfabric,Caching,Notifications,Duplicates,Appfabric,我正在为我的appfabric缓存配置通知。第一个添加操作是发送一个通知。但是,当我用一个新值替换更新同一个缓存项或删除该项时,我会收到该操作的多个通知。我怀疑这与我执行的操作类型无关。因为我也看到了多个添加通知。有什么配置我搞砸了吗?? 我已在回码文件中写入委托。即使是单次操作,它也会持续撞击代理一段时间 我的配置是: <dataCacheClient requestTimeout="150000" channelOpenTimeout="19000" maxConnectionsToS

我正在为我的appfabric缓存配置通知。第一个添加操作是发送一个通知。但是,当我用一个新值替换更新同一个缓存项或删除该项时,我会收到该操作的多个通知。我怀疑这与我执行的操作类型无关。因为我也看到了多个添加通知。有什么配置我搞砸了吗?? 我已在回码文件中写入委托。即使是单次操作,它也会持续撞击代理一段时间

我的配置是:

<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>

请让我知道我在哪里错过了它??为什么它要为同一个项目发送多个通知。如果它有用的话,我使用的是一个有两台主机的集群。并使用相同的缓存进行会话管理。

首先,确保只添加了一个回调。这很简单,但我见过太多添加多个回调的情况

了解缓存通知是基于轮询的,这一点非常重要

使用缓存通知时,应用程序会定期检查缓存集群,以查看是否有任何新通知可用


因此,如果您在两次检查之间将密钥更新10次,您将收到10次通知。

感谢Cybermaxs,我已经了解了出现问题的原因。我错误地为每一个操作添加了一个回调。然而,我们注意到了第二个问题。在第一次轮询之后,应用程序几乎在下一次操作之后立即收到通知,而不是等待下一次轮询。有什么想法吗??
  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));

    }