在多个实例上运行时,我无法使用 Azure 缓存实现会话状态。这是我在学习各种教程时所做的:
1 - 设置缓存:我在旧的 azure 管理门户中添加了缓存服务,但在新门户中找不到缓存选项
2 - 更新 web.config 以包括以下内容:
<configSections>
<section name="dataCacheClients"
type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core"
allowLocation="true"
allowDefinition="Everywhere" />
</configSections>
<dataCacheClients>
<dataCacheClient name="default">
<hosts>
<host name="superSecretName.cache.windows.net" cachePort="22233" />
</hosts>
<securityProperties mode="Message">
<messageSecurity authorizationInfo="superSecretAuthToken"></messageSecurity>
</securityProperties>
</dataCacheClient>
</dataCacheClients>
<system.web>
<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>
</system.web>
3 - 跳一支快乐的舞蹈,直到一切都崩溃和燃烧......
从我在教程和示例中阅读的内容来看,这应该足以Session
像往常一样使用 in 代码,并让它在后台使用缓存。但是,似乎出现了随机的站点崩溃,我已将其归结为会话未填充。尝试访问已放入会话中的数据时,我遇到了空引用异常。我能想到的唯一解释是切换了天蓝色实例,并且缓存并没有真正分布在实例之间(我不过可能是错的)。
我也尝试过不使用会话,而是使用自定义 cookie,然后将内容保存在缓存中并使用 cookie 值从缓存中检索数据,但同样的事情正在发生,所以我猜它不是会话,但底层缓存正在中断。
如标题中所述,Azure 版本是 1.4。我使用的示例很可能是针对较新版本的。由于许多其他库可能会损坏,因此无法切换到较新版本的 Azure。