我们正在尝试更改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分钟,或者无论默认的命名高速缓存设置如何,会话提供程序都会做正确的事情吗?如果我还需要调整命名缓存设置,它们应该是什么?
答案 0 :(得分:0)
根据找到的文档here,Azure Cache的ASP.NET会话状态提供程序显式设置每个对象的到期时间,从而覆盖已配置的缓存到期时间。因此,听起来您只需要担心设置适当的驱逐策略,并且状态提供商管理到期和生存时间。这是相关的摘录:
在共享缓存中,到期始终是绝对的,并且无法设置默认的到期时间。共享缓存中的项目将在48小时后过期。但是,您可以使用Put和Add方法在代码中设置显式的到期时间。请注意,ASP.NET提供程序会自动使用这些重载为会话状态和输出缓存提供显式超时。在任何一种情况下,当您的缓存大小超过共享缓存产品的限制时,缓存中最近最少使用的项目将被逐出。