我正在使用AppFabric在两个或更多不同的Web应用程序之间共享会话。
但是我遇到了一个问题:" 期待会话项目' FULL_NAME'要出现在缓存中,但找不到它,表明当前会话已损坏。请确认已禁用用于存储会话的缓存的LRU驱逐。"
我的配置:
<dataCacheClient>
<hosts>
<host name="CACHE1" cachePort="22233" />
<host name="CACHE2" cachePort="22233" />
<host name="CACHE3" cachePort="22233" />
</hosts>
<machineKey validationKey="C7415df6847D0C0B5146F5605B5973EBD59kjh67EE6414ECD534A95F528F153B6B5F42CFFA9EBF65B2169F7DA5D801C0F9053454A159505253DC687A" decryptionKey="3AE9EE73F1A2781B73DEC6C3fgdgdfD28E0C730284DD314118DA8B" validation="SHA1" decryption="AES" />
<sessionState timeout="40" mode="Custom" customProvider="AFCacheSessionStateProvider">
<providers>
<add name="AFCacheSessionStateProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="XXXXX" shareID="YYYYY" retryCount="10" useBlobMode="false" />
</providers>
</sessionState>
有谁知道什么是问题?
答案 0 :(得分:0)
这不是你需要检查的asp.net配置,它是缓存本身。
在缓存主机上,查看命令Get-CacheConfig XXXXX
的输出 - 正如docs所示,您会看到如下输出:检查EvictionType
:
CacheName : Cache1
TimeToLive : 10 mins
CacheType : Partitioned
Secondaries : 0
IsExpirable : True
EvictionType : LRU
NotificationsEnabled : False
有关逐出设置的详细信息,请参阅Expiration and Eviction文档。如果您的驱逐类型不是LRU,请检查缓存内存使用情况,如该页面所示:
当缓存服务器上的缓存服务的内存消耗时 超过低水印阈值,AppFabric开始驱逐对象 已经过期了。 当内存消耗超过高时 水印阈值,对象从记忆中逐出,无论如何 他们是否已经过期,直到内存消耗回来 降低到低水位。
有一个expiration troubleshooting页面,其中包含更多信息。