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. 分享一个MySQL分库分表备份脚本(原)

    分享一个MySQL分库备份脚本(原) 开发思路: 1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上 ...

  2. bootstrap

    访问Bootstrap中文网,下载bootstrap中文文档,选择用于生产环境的bootstrap. 在官网使用ctrl+f查找想要的内容. 这里记一下Visual Studio Code软件的用法: ...

  3. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

  4. Lesson 23 A new house

    Text I had a letter from my sister yesterday. She lives in Nigeria. In her letter, she said that she ...

  5. 尝试用canvas写小游戏

    还是习惯直接开门见山,这个游戏是有一个老师抓作弊的学生,老师背身,点学生开始加分,老师会不定时回头,如果老师回头还在点学生在,就会被抓住,游戏game over. 1.写游戏首先是loading条,于 ...

  6. ValueInjecter----最好用的OOM(以微信消息转对象举例)

    使用数据实体的好处我这里就不多说了,但大家享受这些好处的时候,难免也对那些琐碎的赋值代码感到厌烦,基于此,我认为掌握一个oom的使用,还是很有必要的. 这种类型的工具有很多,比如automapper, ...

  7. CSharpGL(26)在opengl中实现控件布局/渲染文字

    CSharpGL(26)在opengl中实现控件布局/渲染文字 效果图 如图所示,可以将文字.坐标轴固定在窗口的一角. 下载 CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入( ...

  8. Windows下MySQL的常用操作

    1.MySQL关闭与重启 1.MYSQL服务 我的电脑——(右键)管理——服务与应用程序——服务——MYSQL——开启(停止.重启动) 2.如果你没安装系统服务,可在命令行模式定位到mysql下的bi ...

  9. 持续集成:CruiseControl.NET + VisualSVN.Server

    刚换了工作,有需要搭建一套持续集成的平台,做一下总结. 首先是我用到的工具: 上面缺少了Microsoft Fxcop,可以用来做代码校验,不过实际情况暂时还没有用到.主要的需求目前是,使用已发布的稳 ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色

    系列目录 分配用户给角色,跟分配角色给用户操作是基本一致的. 打开模块维护,展开SysRole模块添加一个操作码,并赋予权限 设置好之后将权限授权给管理员,在SysRole的index添加操作码与js ...