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 之间,木有官方支持,但是可用。无奈咬牙就用这个了。

操作步骤

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

  1. 建立一个 SQL Azure 数据库
  2. 在这个新的空数据库上面跑一个脚本,把所需的表和存储过程都建立起来
  3. 配置 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的更多相关文章

  1. 在 Windows Azure 网站中进行纵向扩展和横向扩展

    编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...

  2. 在 Windows Azure 虚拟机中使用 Microsoft SQL Server 安全功能

    编辑人员注释:本文章由 SQL Server 团队高级项目经理 Sung Hsueh 撰写. SQL Server 的最新用法之一是利用 Microsoft 的 Windows Azure 基础结构服 ...

  3. 进一步探索:Windows Azure 网站中解锁的配置选项

     编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站 (WAWS) 中管理网站时,许多选项可使用 Azu ...

  4. 运行预构建 Linux 映像的 Windows Azure 虚拟机中的交换空间 – 第 1 部分

    本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 随着基础结构服务(虚拟机和虚拟网络)近期在 Windows Azure 上正式发布,越来越多的企业工作负荷正在向 ...

  5. 探索 Windows Azure 网站中的自动伸缩功能

     去年10月,我们发布了若干针对 WindowsAzure平台的更新,其中一项更新是添加了基于日期的自动伸缩调度支持(在不同的日期设置不同的规则). 在这篇博客文章中,我们将了解自动伸缩的概念,并 ...

  6. 禁用 Windows Azure 网站中的 ARR 实例关联

    编辑人员注释: 本博客文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站中设置网站的多个实例是横向扩展网站的绝佳方式,Azur ...

  7. 在 Windows Azure 虚拟机中如何备份和还原 Windows 系统磁盘

    备份和还原对于操作真实的系统来说至关重要.对于 Windows Azure 虚拟机环境中的 Windows Server,可以根据自身的需求选择多种不同的工具或将这些工具结合使用来实现备份.下面将对这 ...

  8. 在中国Windows Azure服务中创建应用程序的一些不同之处

    Azure 中的托管服务由一个应用程序(用于在托管服务中运行)和 XML 配置文件(定义托管服务的运行方式)组成.托管服务同时使用服务定义文件 (.csdef) 和配置文件 (.cscfg).有关详细 ...

  9. 在 Windows Azure 网站中配置动态 IP 地址限制

    我们最近对 Windows Azure 网站进行了升级,并启用了IIS8的动态 IP 限制模块.现在,开发人员可以为其网站启用并配置动态 IP 限制功能(或简称 DIPR). 可以通过以下链接查看此 ...

随机推荐

  1. 支付宝web支付

    过程 1. 用户下单 2. 商户后台产生订单 3. 请求支付宝web支付页面(将订单信息返回给用户---放在form里面---隐藏起来-----并通过脚本自动提交此form到支付宝web支付页) 4. ...

  2. H5嵌入原生开发小结----兼容安卓与ios的填坑之路

    一开始听说开发H5,以为就是做适配现代浏览器的移动网页,心想不用管IE了,欧也.到今天,发现当初too young too simple,兼容IE和兼容安卓与IOS,后者让你更抓狂.接下来数一下踩过的 ...

  3. 页面中调用系统常用的对话框需要用到的classid

    ■打开■ <input name=Button onClick=document.all.WebBrowser.ExecWB(1,1) type=button value=打开> < ...

  4. Error connecting to database [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)]

    参照 http://stackoverflow.com/questions/4448467/cant-connect-to-local-mysql-server-through-socket-var- ...

  5. Maven pom文件常用配置,转载

    什么是POM Project Object Model,项目对象模型.通过xml格式保存的pom.xml文件.作用类似ant的build.xml文件,功能更强大.该文件用于管理:源代码.配置文件.开发 ...

  6. 最近做了了解java基础的一些题,整理自己用到的一些函数和了解的一些名词

    [程序1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析: 兔子的规律为数列1,1,2, ...

  7. python资料

    Python进阶 https://pythontips.com/ https://flyouting.gitbooks.io/learn-python-the-hard-way-cn/content/ ...

  8. 工作笔记--哪些bug应由研发发现?

      标准: 研发应发现: 主功能流程无法正常使用,以及联调时主功能流程是否正常 功能缺失 打包时数据库表非最新.程序文件非最新: 文件导出时有明显错误(如无法导出.导出后格式明显不对.批量导入出错) ...

  9. C++多态详解

    多态是面向对象的程序设计的关键技术.多态:调用同一个函数名,可以根据需要但实现不同的功能.多态体现在两个方面,我们以前学过的编译时的多态性(函数重载)和现在我们这一章将要学习的运行时的多态性(虚函数) ...

  10. 配置 LBaaS - 每天5分钟玩转 OpenStack(121)

    上一节学习了 Neutron LBaaS 的原理,今天开始实践.首先在配置中启用 LBaaS 服务. Neutron 通过 lbaas plugin 和 lbaas agent 提供 LBaaS 服务 ...