2010-09-08 5 views
6

J'utilise AppFabric comme fournisseur d'état de session dans mon application ASP.Net MVC2, et je voudrais également utiliser le cache local. Je l'entrée suivante dans mon web.config juste après le nœud configSections:AppFabric peut-il être le fournisseur de l'état de la session et utiliser le cache local?

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

J'ai aussi l'entrée suivante dans web.config comme un enfant du nœud system.web:

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

Malheureusement, si j'ajouter quelque chose à la session puis exécutez les deux commandes suivantes dans la AppFabric Powershell, tout ce que j'ajouté à ma données de session est plus là ce qui me laisse croire qu'il n'a pas utilisé le cache local:

Stop-CacheCluster 
Start-CacheCluster 

J'essaie aussi des objets de mise en cache avec AppFabric en utilisant le code suivant et après que je commence et arrête le CacheCluster l'objet une fois mis en cache pas est mis en cache plus:

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

Toutefois, si j'instancier AppFabric en utilisant le code suivant où je dis explicitement d'utiliser le cache local plutôt que de compter sur l'entrée web.config cela fonctionne:

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'est-ce que je fais mal, pourquoi ne pas mon travail d'entrée web.config en indiquant AppFabric d'utiliser le cache local? Pouvez-vous utiliser AppFabric en tant que fournisseur d'état de session et utiliser le cache local?

Répondre

Questions connexes