我们正试图改变我们在Azure中ASP.NET会话状态超时,并已注意到的方式ASP.NET会话过期,并命名缓存设置之间的脱节。这将足以改变对Azure的自定义会话状态提供者在web.config的sessionState超时属性还是我们需要改变服务配置命名高速缓存设置影响会话超时?ASP.NET会话状态提供程序的Azure命名缓存设置?
根据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分钟,或者会话提供程序是否执行正确的操作,而不管默认的命名缓存设置如何?如果我还需要调整命名缓存设置,它们应该是什么?
一位值得信赖的Azure技术支持人员写道:“由于您很可能知道会话对象就像存储在缓存中的任何其他对象一样,所以如果您正在为ASP.NET应用程序配置会话超时,您还应该确保在缓存中的会话对象没有得到逐出或过期,当你需要的时候,你还需要有高可用性(HA)对任何灾难恢复功能。所以,是的,你应该重写缓存相关的设置,你已经做了你提供的样本,以获得最佳体验。“ – CAK2
于是,我改变了默认命名Cache驱逐设置为“无”,过期类型为“滑动窗口”,并活到“60”分钟的时间。希望这会保持我的会话对象正常运行。 – CAK2
似乎正在工作。现在几个月的生产中没有出现意外的会话超时问题。 – CAK2