Session 嘛,占一点儿服务器资源,可是总归比 ViewState 和 Cookie 安全点儿,因此仍是要用的。sql
Windows Azure 环境中的 Web 服务器经由负载均衡调度,根本没法保证下一次处理请求的仍是不是上一次的那台服务器,因此,直接使用内存的 In-Process 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 之间,木有官方支持,可是可用。无奈咬牙就用这个了。
其实挺简单的,分三个步骤:
首先,登陆 Windows Azure 控制台,建立一个空的数据库。这里给它起名 ASPState。若是你检索过英文资料,那么你发现有人(文章)会让你运行一段 SQL 脚本建立这个数据库。从应用的角度看,效果是同样的,可是,这个脚本建立的数据库,是不会出如今 Azure 控制台的数据库列表里面的。因此,仍是应该直接在 Azure 控制台里面创建这个数据库。
而后,下载本文末尾提供的文件连接,解压后获得 SQL 文件,用 SQL Server Management Studio 打开 Azure 数据库 ASPState 后,运行此脚本便可完成第二步。这个脚本不是我写的,是从 这个地址 下载的。可是原始的下载包是包含建立数据库脚本的,基于上面的缘由,我给去掉了,以避免引发混乱;同时,也起到异地备份的做用。
打开 ASPState 数据库以及配置 Web.Config 须要链接字符串的参数,能够在 Azure 的数据库面板上面找到,点击“查看 ADO .NET …. 链接字符串”就是:
用 SQL Server Management Studio 链接 Azure 数据库的过程当中,你可能会收到一个“IP 地址被防火墙拦截”的错误消息。不要紧,切换到 Azure 控制台的数据库管理界面,打开上面的链接字符串对话框,你会看到 Azure 会提示你是否须要容许这个 IP 地址访问数据库,只须要点击提示,将 IP 地址加入容许的访问列表中保存便可。
最后,在你的 Web.Config 的 System.Web 节中添加下面的内容便可(用 % 引用的内容须要按照你的实际状况替换):
好了,下面就能够开始用 Session 了。
附件:下载 配置 ASPState 数据库的脚本文件 (zip 格式)。
特别说明:SQLServer 的 Session 须要手动调用 DeleteExpiredSessions 存储过程(若是你运行上面的 SQL 脚本,这个存储过程是会给你建立好的),由于 SQL Azure 不提供 Agent 服务,因此要手动调用或者用 Azure 提供的“计划调用”服务等手段。这个调用的时机见仁见智,要结合本身应用的实际来安排,这篇短文中就不展开讲太多了。
■