【问题标题】:Sessions stored in a co-located Azure cache gets out of sync on multiple instances存储在同一位置的 Azure 缓存中的会话在多个实例上不同步
【发布时间】:2012-09-04 06:08:53
【问题描述】:

对于在 Azure 中运行的 MVC4 应用程序,我将会话存储在同位缓存中。如 Microsoft 提供的 this How-to 中所述。

我运行了两个小实例,一切似乎都运行良好。我可以登录到应用程序,当我在应用程序中四处浏览时,我仍然保持登录状态。所以会话似乎在这两种情况下都有效。

但是,当我更新会话数据时,如下所示:

HttpContext.Current.Session["someVar"] = "new value";

该更改似乎只对处理该特定请求的实例产生影响。现在,当我浏览应用程序时,有时会得到初始值,有时会得到更新后的值。

我没有对 web.config 进行任何更改,因此它看起来与被 Nuget 包添加时完全一样:

<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
  <providers>
    <add name="AppFabricCacheSessionStoreProvider"
          type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"
          cacheName="default"
          useBlobMode="true"
          dataCacheClientName="default" />
  </providers>
</sessionState>

在使用 Azure 缓存时是否需要以其他方式处理会话,还是我在这里缺少的其他东西?

【问题讨论】:

    标签: c# asp.net asp.net-mvc azure azure-caching


    【解决方案1】:

    您需要分配一个applicationName,以便分布式缓存可以查看同一应用程序边界内的共享状态。见MSDN forum post for reference

    <add name="AppFabricCacheSessionStoreProvider"
              type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"
              applicationName="azureMVC4App"
              cacheName="default"
              useBlobMode="true"
              dataCacheClientName="default" />
    

    如果要跨应用边界共享缓存状态,需要分配sharedId

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 2021-10-23
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      相关资源
      最近更新 更多