存储在共存Azure缓存中的会话在多个实例上不同步

Chr*_*son 6 c# asp.net asp.net-mvc azure azure-caching

对于我的MVC4应用程序,在Azure中运行,我将会话存储在共存的缓存中.如Microsoft提供的本方法文档中所述.

我运行两个小实例,一切似乎都运行正常.我可以登录到应用程序,当我在应用程序中浏览时,我仍然保持登录状态.因此,会话似乎适用于两个实例.

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

HttpContext.Current.Session["someVar"] = "new value";
Run Code Online (Sandbox Code Playgroud)

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

我没有对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>
Run Code Online (Sandbox Code Playgroud)

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

Sli*_*SFT 7

您需要分配一个applicationName以便分布式缓存可以在同一应用程序边界内查看共享状态.请参阅MSDN论坛帖子以供参考.

<add name="AppFabricCacheSessionStoreProvider"
          type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"
          applicationName="azureMVC4App"
          cacheName="default"
          useBlobMode="true"
          dataCacheClientName="default" />
Run Code Online (Sandbox Code Playgroud)

如果要跨应用程序边界共享缓存状态,则需要进行分配 sharedId