ASP.NET 在 Windows Azure 环境中使用基于 SQLServer 的 Session

Session 嘛,占一点儿服务器资源,可是总归比 ViewState 和 Cookie 安全点儿,因此仍是要用的。sql

Windows Azure 环境中的 Web 服务器经由负载均衡调度,根本没法保证下一次处理请求的仍是不是上一次的那台服务器,因此,直接使用内存的 In-Process Session 就不能用了。数据库

Session

那么怎么办呢?缓存

 

备选方案

ASP.NET State Service 安全

专门用一台服务器来管理 Session。这个方案 On-Premis 方案里面能够用,Azure 的环境中尚未任何可用的迹象,跳过。服务器

 

Table Storage负载均衡

直接用 Azure 里面的存储服务来给你保存 Session。存储服务好便宜,最高级的“读取访问地域冗余存储 (RA-GRS)”对表和队列的报价是 $0.12  1T/月。可是,问题就是慢。因此,跳过。blog

 

Azure Caching队列

内存的缓存服务,速度最快、也最贵。最大的问题是,中国的 Azure 目前还不支持(但云服务提供 In Role Caching)。无奈跳过。ip

 

SQL Azure内存

速度介于 Table Storage 和 Azure Caching 之间,木有官方支持,可是可用。无奈咬牙就用这个了。

 

操做步骤

其实挺简单的,分三个步骤:

  1. 创建一个 SQL Azure 数据库
  2. 在这个新的空数据库上面跑一个脚本,把所需的表和存储过程都创建起来
  3. 配置 ASP.NET Web 应用的 Web.Config 文件

 

首先,登陆 Windows Azure 控制台,建立一个空的数据库。这里给它起名 ASPState。若是你检索过英文资料,那么你发现有人(文章)会让你运行一段 SQL 脚本建立这个数据库。从应用的角度看,效果是同样的,可是,这个脚本建立的数据库,是不会出如今 Azure 控制台的数据库列表里面的。因此,仍是应该直接在 Azure 控制台里面创建这个数据库。

Database

 

而后,下载本文末尾提供的文件连接,解压后获得 SQL 文件,用 SQL Server Management Studio 打开 Azure 数据库 ASPState 后,运行此脚本便可完成第二步。这个脚本不是我写的,是从 这个地址 下载的。可是原始的下载包是包含建立数据库脚本的,基于上面的缘由,我给去掉了,以避免引发混乱;同时,也起到异地备份的做用。

打开 ASPState 数据库以及配置 Web.Config 须要链接字符串的参数,能够在 Azure 的数据库面板上面找到,点击“查看 ADO .NET …. 链接字符串”就是:

Panel

用 SQL Server Management Studio 链接 Azure 数据库的过程当中,你可能会收到一个“IP 地址被防火墙拦截”的错误消息。不要紧,切换到 Azure 控制台的数据库管理界面,打开上面的链接字符串对话框,你会看到 Azure 会提示你是否须要容许这个 IP 地址访问数据库,只须要点击提示,将 IP 地址加入容许的访问列表中保存便可。

 

最后,在你的 Web.Config 的 System.Web 节中添加下面的内容便可(用 % 引用的内容须要按照你的实际状况替换):

Web.Config

 

好了,下面就能够开始用 Session 了。

 

附件:下载 配置 ASPState 数据库的脚本文件 (zip 格式)。

特别说明:SQLServer 的 Session 须要手动调用 DeleteExpiredSessions 存储过程(若是你运行上面的 SQL 脚本,这个存储过程是会给你建立好的),由于 SQL Azure 不提供 Agent 服务,因此要手动调用或者用 Azure 提供的“计划调用”服务等手段。这个调用的时机见仁见智,要结合本身应用的实际来安排,这篇短文中就不展开讲太多了。

 

相关文章
相关标签/搜索