Azure缓存不会跨VIP交换持久保持会话状态?

SB2*_*055 2 caching azure asp.net-mvc-4

作为这篇文章的后续内容:在Azure云服务中启用协同定位的会话缓存 - 我正在尝试在Azure缓存中存储会话状态以在VIP交换之间保持会话.引用答案:

要解决此问题,我希望您尝试新的缓存服务(预览).通过这种方式,您可以为订阅创建专用缓存,以便您可以在云服务部署,虚拟机和网站中使用它们.

我已经设置了Azure缓存(预览)实例,在我的web.config中使用了其端点和主访问密钥,并部署到我的Azure云服务暂存插槽.

然后我使用Forms auth登录,并重新部署到同一个插槽.我的凭据一直存在!这很棒.

但后来我交换到Production,以相同的方式登录到生产实例,重新部署到Staging,VIP再次交换,然后刷新,期望保持登录,但它不起作用 - 我的会话在两个生产中都丢失了和分期.

我按照这里的说明操作:

http://www.windowsazure.com/en-us/manage/services/cache/net/how-to-in-role-cache/#getting-started-cache-role-instance

可能是什么导致了这个?没有抛出任何异常 - 我的访问密钥工作(通过给它一个伪造的并且获得异常进行测试)......我不确定发生了什么.在web.config中配置部分:

 <sessionState mode="Custom" customProvider="AFCacheSessionStateProvider" xdt:Transform="Insert">
  <providers>
    <add name="AFCacheSessionStateProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" applicationName="AFCacheSessionState"/>
  </providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)

和:

<dataCacheClient name="default">
      <autoDiscover isEnabled="true" identifier="mysite.cache.windows.net" />
      <securityProperties mode="Message" sslEnabled="false">
        <messageSecurity authorizationInfo="{my key}" />
      </securityProperties>
    </dataCacheClient>
Run Code Online (Sandbox Code Playgroud)

至于超时策略 - 我将其设置为永不过期并启用逐出.我是少数几个用户之一,缓存在128MB的空间中存储cookie,所以我认为它与到期有关.

我也注意到在文档中,没有applicationName像我上面那样的条目.我尝试删除它并重新测试,但无济于事 - 我的Prod会话仍然在VIP交换时丢失.

我究竟做错了什么?

更新:

来自微软论坛帖子:

我能够重现这个问题.我正在调查.

Pas*_*ash 8

表单身份验证不基于会话状态.它仅依赖于客户端cookie.Cookie使用web.config的machineKey部分中指定的密钥进行加密和验证.默认配置是:

<machineKey validationKey="AutoGenerate,IsolateApps"  
            decryptionKey="AutoGenerate,IsolateApps" 
            validation="SHA1" decryption="Auto" />
Run Code Online (Sandbox Code Playgroud)

AutoGenerate意味着每台物理机器都有自己的decryptionKey.暂存VM不会接受生产VM生成的Cookie.

在VIP交换之后,旧生产VM设置的所有cookie将被新的生产VM(ex-Staging VM)拒绝,从而导致所有用户被注销.

您需要显式指定machineKey值以强制Forms Auth生成对新旧生产VM都有效的Cookie(请参阅如何:配置MachineKey,Web场部署注意事项部分).

检查这个在线工具的machineKey部分生成:http://aspnetresources.com/tools/machineKey.

UPD:在Windows Azure管理部署/管理IIS的ASP.NET机器密钥中有相关说明:

Windows Azure自动管理使用IIS部署的服务的ASP.NET machineKey.如果您经常使用VIP交换部署策略,则应手动配置ASP.NET机器密钥.