ASP.NET 在 Windows Azure 环境中使用基于 SQLServer 的 Session
Session 嘛,占一点儿服务器资源,但是总归比 ViewState 和 Cookie 安全点儿,所以还是要用的。
Windows Azure 环境中的 Web 服务器经由负载均衡调度,根本无法保证下一次处理请求的还是不是上一次的那台服务器,所以,直接使用内存的 In-Process Session 就不能用了。

那么怎么办呢?
备选方案
ASP.NET State Service
专门用一台服务器来管理 Session。这个方案 On-Premis 方案里面可以用,Azure 的环境中还没有任何可用的迹象,跳过。
Table Storage
直接用 Azure 里面的存储服务来给你保存 Session。存储服务好便宜,最高级的“读取访问地域冗余存储 (RA-GRS)”对表和队列的报价是 $0.12 1T/月。但是,问题就是慢。所以,跳过。
Azure Caching
内存的缓存服务,速度最快、也最贵。最大的问题是,中国的 Azure 目前还不支持(但云服务提供 In Role Caching)。无奈跳过。
SQL Azure
速度介于 Table Storage 和 Azure Caching 之间,木有官方支持,但是可用。无奈咬牙就用这个了。
操作步骤
其实挺简单的,分三个步骤:
- 建立一个 SQL Azure 数据库
- 在这个新的空数据库上面跑一个脚本,把所需的表和存储过程都建立起来
- 配置 ASP.NET Web 应用的 Web.Config 文件
首先,登录 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 提供的“计划调用”服务等手段。这个调用的时机见仁见智,要结合自己应用的实际来安排,这篇短文中就不展开讲太多了。
■
ASP.NET 在 Windows Azure 环境中使用基于 SQLServer 的 Session的更多相关文章
- 在 Windows Azure 网站中进行纵向扩展和横向扩展
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...
- 在 Windows Azure 虚拟机中使用 Microsoft SQL Server 安全功能
编辑人员注释:本文章由 SQL Server 团队高级项目经理 Sung Hsueh 撰写. SQL Server 的最新用法之一是利用 Microsoft 的 Windows Azure 基础结构服 ...
- 进一步探索:Windows Azure 网站中解锁的配置选项
编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站 (WAWS) 中管理网站时,许多选项可使用 Azu ...
- 运行预构建 Linux 映像的 Windows Azure 虚拟机中的交换空间 – 第 1 部分
本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 随着基础结构服务(虚拟机和虚拟网络)近期在 Windows Azure 上正式发布,越来越多的企业工作负荷正在向 ...
- 探索 Windows Azure 网站中的自动伸缩功能
去年10月,我们发布了若干针对 WindowsAzure平台的更新,其中一项更新是添加了基于日期的自动伸缩调度支持(在不同的日期设置不同的规则). 在这篇博客文章中,我们将了解自动伸缩的概念,并 ...
- 禁用 Windows Azure 网站中的 ARR 实例关联
编辑人员注释: 本博客文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站中设置网站的多个实例是横向扩展网站的绝佳方式,Azur ...
- 在 Windows Azure 虚拟机中如何备份和还原 Windows 系统磁盘
备份和还原对于操作真实的系统来说至关重要.对于 Windows Azure 虚拟机环境中的 Windows Server,可以根据自身的需求选择多种不同的工具或将这些工具结合使用来实现备份.下面将对这 ...
- 在中国Windows Azure服务中创建应用程序的一些不同之处
Azure 中的托管服务由一个应用程序(用于在托管服务中运行)和 XML 配置文件(定义托管服务的运行方式)组成.托管服务同时使用服务定义文件 (.csdef) 和配置文件 (.cscfg).有关详细 ...
- 在 Windows Azure 网站中配置动态 IP 地址限制
我们最近对 Windows Azure 网站进行了升级,并启用了IIS8的动态 IP 限制模块.现在,开发人员可以为其网站启用并配置动态 IP 限制功能(或简称 DIPR). 可以通过以下链接查看此 ...
随机推荐
- 什么是英特尔® Edison 模块?
英特尔® Edison 模块 是一种 SD 卡大小的微型计算芯片,专为构建物联网 (IoT) 和可穿戴计算产品而设计. Edison 模块内含一个高速的双核处理单元.集成 Wi-Fi*.蓝牙* 低能耗 ...
- ASP.NET 5 和Entity Framework 7公告仓库
ASP.NET 5 有一个公告仓库来介绍ASP.NET 5和 Entity Framework 7的主要变更说明,这个对于日夜更新的项目来说,很多人经常会遇到问题但是不知道去哪里寻找帮助,很多同学在做 ...
- Markdown是怎样接管我的各种的写作工作的
对于一个程序猿来说,没有什么比单纯的写代码更能让人兴奋了.如果能让你像写代码一样写文档,不用再面对那些繁琐的样式,你会怎么看?它就是Markdown!即使博客园已经有不少介绍的文章了,但是我依然还是不 ...
- [Solr] (源) Solr与MongoDB集成,实时增量索引
一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中,直接向Solr服务发送请求,返回xml.js ...
- Entity Framework 6 Recipes 2nd Edition(10-3)译 -> 返回结果是一个标量值
10-3. 返回结果是一个标量值 问题 想取得存储过程返回的一个标量值. 解决方案 假设我们有如Figure 10-2所示的ATM机和ATM机取款记录的模型 Figure 10-2. 一个ATM机和A ...
- Rxjava cold/hot Observable
create Observable分为cold以及hot两种,cold主要是静态的,每次subscribe都是从头开始互不干扰,而hot的在同一时刻获得的值是一致的 cold Observable 使 ...
- 编程之美—烙饼排序问题(JAVA)
一.问题描述 星期五的晚上,一帮同事在希格玛大厦附近的"硬盘酒吧"多喝了几杯.程序员多喝了几杯之后谈什么呢?自然是算法问题.有个同事说:"我以前在餐 馆打工,顾 ...
- TSQL 分组集(Grouping Sets)
分组集(Grouping Sets)是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用“union all”,计算多个结果集的并集.使用分组集的聚合查询,返回 ...
- word-break: break-all;、word-break: keep-all; 、word-wrap: break-word;和white-space:nowrap;都有什么作用
小颖最近心情不好,心情不好就容易做傻事,所以昨天就干了件傻事 小颖昨天脑子一抽去拔罐了,拔完我就~~~~~~~~~~~~疼死宝宝了,昨晚一晚都没睡好,都不敢平躺,难受一晚上,早上到公司后困得啊,也是傻 ...
- RMAN异机恢复快速参考
应用场景:服务器A为正常运行的生产环境,需要在服务器B上部署一套相同环境做测试. 数据库环境:RHEL6.4 + Oracle 11.2.0.4.7 一. 服务器A备份数据库 1.1 在线备份(数据库 ...