AppFabric可以作为会话状态提供程序并使用本地缓存吗?

时间:2010-09-08 02:30:40

标签: session-state appfabric

我在我的ASP.Net MVC2应用程序中使用AppFabric作为会话状态提供程序,我希望它也使用本地缓存。我在config.ctions节点之后的web.config中有以下条目:

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

不幸的是,如果我在会话中添加一些东西,那么在AppFabric powershell中运行以下两个命令,我添加到会话数据的任何内容都不再存在,这让我相信它没有使用本地缓存:

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作为会话状态提供程序,还可以使用本地缓存吗?

1 个答案:

答案 0 :(得分:4)

我在http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/24e72dab-bb20-47ec-aae2-77423b1d296b发现了一点点小调。

基本上,“enableSessionState”默认为“true”,这意味着您需要为所有请求远程执行。如果将属性设置为“ReadOnly”,则将从本地缓存中检索会话状态对象。然后,如果本地缓存失效,它将再次进入远程存储。