ASP.NET会话状态提供程序的Azure命名缓存设置?

时间:2013-06-01 01:38:33

标签: caching azure session-timeout session-state

我们正在尝试更改Azure中的ASP.NET会话状态超时,并注意到ASP.NET会话过期的方式与命名高速缓存设置之间存在脱节。是否可以更改Azure自定义会话状态提供程序的web.config sessionState超时属性,还是需要更改服务配置中的命名高速缓存设置以影响会话超时?

根据MSDN,HttpSessionState.Timeout属性是会话状态提供程序终止会话之前请求之间允许的时间(以分钟为单位)。这意味着所有Session对象在每个带有SessionID的请求之后都会获得新的生命周期。

我们的Windows Azure ASP.NET应用程序由两个生产实例支持,并配置为通过用于Windows Azure缓存的会话状态提供程序在分布式共存缓存中维护会话状态。以下是配置自定义会话状态提供程序的web.config文件片段:

    <!-- Windows Azure Caching session state provider -->
    <sessionState mode="Custom" customProvider="AFCacheSessionStateProvider">
        <providers>
            <add name="AFCacheSessionStateProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" applicationName="AFCacheSessionState"/>
        </providers>
    </sessionState>

    <!-- Windows Azure Caching output caching provider -->
    <caching>
        <outputCache defaultProvider="AFCacheOutputCacheProvider">
            <providers>
                <add name="AFCacheOutputCacheProvider" type="Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" applicationName="AFCacheOutputCache" />
            </providers>
        </outputCache>
    </caching>

上述设置在ASP.NET Session State Provider Configuration Settings (Windows Azure Caching)定义。我们使用默认的dataCacheClientName。在Web角色属性的“缓存”选项卡上配置默认缓存和任何其他命名缓存。 GUI提供了一种友好的方式来维护命名高速缓存设置,这些设置以高度不可读的方式存储在所选服务配置的.cscfg文件中。请注意默认缓存的驱逐策略,过期类型和生存时间属性。这些属性在How to Use Windows Azure Caching定义。它们暗示每个缓存对象都有自己的生命周期,而Session对象应该一直持续到ASP.NET会话到期为止。我是否需要更改命名高速缓存设置以将sessionState超时扩展到60分钟,或者无论默认的命名高速缓存设置如何,会话提供程序都会做正确的事情吗?如果我还需要调整命名缓存设置,它们应该是什么?

1 个答案:

答案 0 :(得分:0)

根据找到的文档here,Azure Cache的ASP.NET会话状态提供程序显式设置每个对象的到期时间,从而覆盖已配置的缓存到期时间。因此,听起来您只需要担心设置适当的驱逐策略,并且状态提供商管理到期和生存时间。这是相关的摘录:

  

在共享缓存中,到期始终是绝对的,并且无法设置默认的到期时间。共享缓存中的项目将在48小时后过期。但是,您可以使用Put和Add方法在代码中设置显式的到期时间。请注意,ASP.NET提供程序会自动使用这些重载为会话状态和输出缓存提供显式超时。在任何一种情况下,当您的缓存大小超过共享缓存产品的限制时,缓存中最近最少使用的项目将被逐出。