Azure Cache - 存储在Session中的对象

时间:2014-06-15 17:50:21

标签: object caching azure

我计划将.Net应用程序(基于SQL Server)迁移到Azure。但是,在我朝这个方向作出实质性努力之前,我想确保在未来不会出现瓶颈。在代码中,在几个地方我们只是在Session中放置对象(而不是文字键值)。像这样:

  

会话(“clientlist”)= _MyClientList

(其中_MyClientList对象封装从数据库返回的表或代码中定义的View Model对象)。

问题是,如果我使用Azure缓存(在Azure云服务中),缓存API是否能够跨各种实例自动持久化(序列化/反序列化)这些对象?

现在代码工作正常(当然,只有服务器的一个实例正在运行,并且很可能,服务器保持对这些进程内对象的引用,因此磁盘上没有这些对象的持久性)。

一个相关的问题,在负载均衡器后面启动两个实例后,有一种方法可以测试一切是否正常。我怀疑没有加载,所有请求都将访问同一个实例,因此可以正确测试缓存。真正?对不起,这个领域有点新手。

提前致谢。

1 个答案:

答案 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

通过这种方式,您可以测试请求是在所有服务器上运行还是只在一台服务器上进行,并且在切换服务器时会话会持续存在。