2013-06-01 39 views
2

我们正试图改变我们在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分钟,或者会话提供程序是否执行正确的操作,而不管默认的命名缓存设置如何?如果我还需要调整命名缓存设置,它们应该是什么?

+0

一位值得信赖的Azure技术支持人员写道:“由于您很可能知道会话对象就像存储在缓存中的任何其他对象一样,所以如果您正在为ASP.NET应用程序配置会话超时,您还应该确保在缓存中的会话对象没有得到逐出或过期,当你需要的时候,你还需要有高可用性(HA)对任何灾难恢复功能。所以,是的,你应该重写缓存相关的设置,你已经做了你提供的样本,以获得最佳体验。“ – CAK2

+0

于是,我改变了默认命名Cache驱逐设置为“无”,过期类型为“滑动窗口”,并活到“60”分钟的时间。希望这会保持我的会话对象正常运行。 – CAK2

+0

似乎正在工作。现在几个月的生产中没有出现意外的会话超时问题。 – CAK2

回答

0

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

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

相关问题