我计划将.Net应用程序(基于SQL Server)迁移到Azure。但是,在我朝这个方向作出实质性努力之前,我想确保在未来不会出现瓶颈。在代码中,在几个地方我们只是在Session中放置对象(而不是文字键值)。像这样:
会话(“clientlist”)= _MyClientList
(其中_MyClientList对象封装从数据库返回的表或代码中定义的View Model对象)。
问题是,如果我使用Azure缓存(在Azure云服务中),缓存API是否能够跨各种实例自动持久化(序列化/反序列化)这些对象?
现在代码工作正常(当然,只有服务器的一个实例正在运行,并且很可能,服务器保持对这些进程内对象的引用,因此磁盘上没有这些对象的持久性)。
一个相关的问题,在负载均衡器后面启动两个实例后,有一种方法可以测试一切是否正常。我怀疑没有加载,所有请求都将访问同一个实例,因此可以正确测试缓存。真正?对不起,这个领域有点新手。
提前致谢。
答案 0 :(得分:0)
问题是,如果我使用Azure缓存,缓存api是否可以 自动持久化(序列化/反序列化)这些对象 各种情况?
是的,Azure Caching将为您执行此操作(我在我的应用程序中使用角色内缓存)。但是,为此,您必须使用Azure Caching Session State Provider
。这是你需要放在web.config文件中的东西:
<sessionState mode="Custom" customProvider="AFCacheSessionStateProvider">
<providers>
<add name="AFCacheSessionStateProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" applicationName="AFCacheSessionState"/>
</providers>
</sessionState>
(实际上,当您在角色中启用缓存时,会自动插入上面的代码行。您只需要取消注释这些行。)
<强>更新强>
相关问题,在负载后启动两个实例后 平衡器,有没有办法测试一切是否正常。我的 怀疑是没有负载,所有请求都会达到相同的效果 实例,因此可以正确测试缓存。真正?对不起 这个领域的新手。
您可以做的一件事是将计算机的名称放在代码中的某个位置(可能是页脚)。如果您正在使用MVC,您可以执行以下操作:
@System.Environment.MachineName
通过这种方式,您可以测试请求是在所有服务器上运行还是只在一台服务器上进行,并且在切换服务器时会话会持续存在。