作为这篇文章的后续:在 Azure 云服务中启用共置会话缓存 https://stackoverflow.com/questions/20964697/enabling-co-located-session-caching-in-an-azure-cloud-service- 我尝试将会话状态存储在 Azure 缓存中,以保留 VIP 交换之间的会话。引用自答案:
为了解决这个问题,我希望您尝试新的缓存服务
(预览)。通过这种方式,您可以为您的订阅创建专用缓存
以便您可以跨云服务部署、虚拟
机器和网站。
我已设置一个 Azure 缓存(预览版)实例,在 web.config 中使用其端点和主访问密钥,并部署到我的 Azure 云服务暂存槽。
然后,我使用 Forms auth 登录,并重新部署到同一插槽。我的凭证被保留了!很高兴看到这一点。
但后来我 VIP 切换到 Production,以相同的方式登录到生产实例,重新部署到 Staging,再次切换 VIP,然后刷新,期望保持登录状态,但它不起作用 - 我的会话在两个生产中都丢失了和分期。
我已按照此处找到的说明进行操作:
http://www.windowsazure.com/en-us/manage/services/cache/net/how-to-in-role-cache/#getting-started-cache-role-instance 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>
And:
<dataCacheClient name="default">
<autoDiscover isEnabled="true" identifier="mysite.cache.windows.net" />
<securityProperties mode="Message" sslEnabled="false">
<messageSecurity authorizationInfo="{my key}" />
</securityProperties>
</dataCacheClient>
至于超时策略 - 我将其设置为在启用驱逐的情况下永不过期。我是少数用户之一,缓存将 cookie 存储在 128MB 的空间中,所以我认为这与过期无关。
我还注意到,在docs http://www.windowsazure.com/en-us/manage/services/cache/net/how-to-in-role-cache/#store-session,没有条目applicationName
正如我上面所说的。我尝试删除它并重新测试,但无济于事 - 我的 Prod 会话在 VIP 交换时仍然丢失。
我究竟做错了什么?
Update:
来自微软:
我能够重现该问题。我正在调查。