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. 【译】Meteor 新手教程:在排行榜上添加新特性

    原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...

  2. [转载]Java 8 日期&时间 API

    Java 8 日期和时间 声明 本文转自http://www.journaldev.com/2800/java-8-date-localdate-localdatetime-instant,以mark ...

  3. 性能测试工具 wrk 安装与使用

    介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...

  4. 关于《Linux.NET学习手记(8)》的补充说明

    早前的一两天<Linux.NET学习手记(8)>发布了,这一篇主要是讲述OWIN框架与OwinHost之间如何根据OWIN协议进行通信构成一套完整的系统.文中我们还直接学习如何直接操作OW ...

  5. ASP.NET Web API 控制器创建过程(一)

    ASP.NET Web API 控制器创建过程(一) 前言 在前面对管道.路由有了基础的了解过后,本篇将带大家一起学习一下在ASP.NET Web API中控制器的创建过程,这过程分为几个部分下面的内 ...

  6. ASP.NET Web API 管道模型

    ASP.NET Web API 管道模型 前言 ASP.NET Web API是一个独立的框架,也有着自己的一套消息处理管道,不管是在WebHost宿主环境还是在SelfHost宿主环境请求和响应都是 ...

  7. Module Zero学习目录

    Module-Zero是实现了ASP.NET Boilerplate框架抽象概念的模块,对于企业web应用也添加了一些有用的东西: 实现了ASP.NET Identity框架的用户和角色管理. 提供了 ...

  8. java终端获取输入

    上一篇博客已经介绍了System.in这个输入流这次谈谈java如何获取终端(控制台)的输入 (1)BufferedReader JDK 1.4 及以下的版本中要想从控制台中输入数据只有一种办法,即使 ...

  9. 基于Caffe的DeepID2实现(上)

    小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现.DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源 ...

  10. ASP.NET Core管道深度剖析(4):管道是如何建立起来的?

    在<管道是如何处理HTTP请求的?>中,我们对ASP.NET Core的请求处理管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.这样一 ...