Я использую AppFabric в качестве поставщика состояния сеанса в своем приложении ASP.Net MVC2, и я хотел бы, чтобы оно также использовало локальный кэш. У меня есть следующая запись в моем web.config сразу после узла configSections:
<dataCacheClient>
<localCache
isEnabled="true"
sync="TimeoutBased"
objectCount="100000"
ttlValue="300" />
<hosts>
<host name="127.0.0.1" cachePort="22233"/>
</hosts>
</dataCacheClient>
У меня также есть следующая запись в web.config как дочерний элемент узла system.web:
<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
<providers>
<add name="AppFabricCacheSessionStoreProvider" type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider" cacheName="Default" sharedId="DefaultId"/>
</providers>
</sessionState>
К сожалению, если я добавлю что-то в сессию, а затем выполню следующие две команды в PowerShell AppFabric, все, что я добавил к своим данным сеанса, больше не будет, и я не верю, что оно не использует локальный кеш:
Stop-CacheCluster
Start-CacheCluster
Я также пытаюсь кэшировать объекты с помощью AppFabric, используя следующий код, и после того, как я запускаю и останавливаю CacheCluster, один раз кэшированный объект больше не кэшируется:
var factory = new DataCacheFactory();
var cache = factory.GetCache("Default");
cache.Put("Key", "Test");
Однако, если я создаю экземпляр AppFabric с использованием следующего кода, где я явно говорю ему использовать локальный кеш, а не полагаться на запись web.config, это работает:
var servers = new List<DataCacheServerEndpoint>(1) { new DataCacheServerEndpoint("127.0.0.1", 22233) };
var configuration = new DataCacheFactoryConfiguration {
Servers = servers,
LocalCacheProperties = new DataCacheLocalCacheProperties(100000, new TimeSpan(0, 30, 0), DataCacheLocalCacheInvalidationPolicy.TimeoutBased)
};
var factory = new DataCacheFactory(configuration);
var cache factory.GetCache("StpWebSession");
cache.Put("Key", "Test");
Что я делаю не так, почему моя запись web.config не работает, говоря AppFabric об использовании локального кэша? Можете ли вы использовать AppFabric в качестве поставщика состояния сеанса, а также использовать локальный кеш?