2010-09-08 16 views
6

Estoy usando AppFabric como proveedor de estado de sesión en mi aplicación ASP.Net MVC2, y me gustaría que también use la memoria caché local. Tengo la siguiente entrada en mi web.config justo después del nodo configSections:¿Puede AppFabric ser el proveedor del estado de la sesión y usar el caché local?

<dataCacheClient> 
    <localCache 
     isEnabled="true" 
     sync="TimeoutBased" 
     objectCount="100000" 
     ttlValue="300" /> 
    <hosts> 
     <host name="127.0.0.1" cachePort="22233"/> 
    </hosts> 
</dataCacheClient> 

que también tienen la siguiente entrada en web.config como un hijo del nodo system.web:

<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider"> 
    <providers> 
     <add name="AppFabricCacheSessionStoreProvider" type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider" cacheName="Default" sharedId="DefaultId"/> 
    </providers> 
</sessionState> 

Por desgracia, si añado algo a la sesión a continuación, ejecute los dos comandos siguientes en el powershell AppFabric, nada he añadido a mi sesión de datos ya no está allí, que me deja creer que no estaba usando caché local:

Stop-CacheCluster 
Start-CacheCluster 

también trato objetos de almacenamiento en caché con AppFabric usando el siguiente código y después de arrancar y parar el CacheCluster el objeto una vez en caché ya no se almacena en caché:

var factory = new DataCacheFactory(); 
var cache = factory.GetCache("Default"); 
cache.Put("Key", "Test"); 

Sin embargo si instanciar AppFabric usando el siguiente código donde explícitamente la cuento utilizar caché local en lugar de confiar en la entrada web.config funciona:

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"); 

¿Qué estoy haciendo mal, ¿por qué no se web.config trabajo de entrada en contar AppFabric utilizar caché local? ¿Puedes usar AppFabric como tu proveedor de estado de sesión y también hacer que use caché local?

Respuesta

4

Encontré una pequeña canción en http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/24e72dab-bb20-47ec-aae2-77423b1d296b.

Básicamente, "enableSessionState" es "verdadero" de forma predeterminada, lo que significa que necesita ir de forma remota para todas las solicitudes. Si establece la propiedad en "Solo lectura", el objeto de estado de la sesión se recuperará de la memoria caché local. Luego, si la memoria caché local se invalida, irá a la tienda remota nuevamente.

Cuestiones relacionadas