关于ASP.NET Session State Server
最近公司开发的一个网站因为访问量增大,需要添加多台Web Server来进行负载均衡。
但是在做负载均衡前需要将一些原来固定存储在单台机器上的东西分离出来,使之能单独存在在一个独立的机器上,其中就有Session State。
Session这个东西有它的优点也有缺点:
优点首先是它是存放在服务器的,不用像Cookie那样每次都要回发到浏览器,占用额外的网络带宽;况且这个Cookie的大小也是有限制的;
其次是Session里面可以存放一些复杂的.Net的对象;另外,ASP.NET的Cache,还有ASP.NET MVC里的TempData,都是基于Session的。
缺点是如果我们采用进程内(InProc,ASP.NET的默认方式)Session,那么首先它容易丢失,因为服务器上的ASP.NET工作进程会不定期或定期做回收,一旦回收,那么Session即丢失;
另外一个缺点是进程内Session既然是存放在进程内的,那么即使是多个ASP.NET工作进程也无法共享Session,更别谈多台机器了;也就是在多工作进程/多机器环境下,用户因为每次请求都是被Load Balancer通过
某种策略分配到不同的机器上(除非Load Balancer启用了某种IP Stickness特性),那么会出现某些请求在服务器端读不到Session的情况。
解决进程内Session带来的这些问题的方法有很多,但作用都是讲Session保存在进程外的其它地方。
常用的方式有将Session保存在数据库里,ASP.NET State Server里,或者使用第三方的Session存放方案,比如使用MemCache等内存存储框架。
从性能上来说,进程内的Session最高,ASP.NET State Server其次,存放在数据库里最低。这个也很好理解,因为进程内的和ASP.NET State Server的都是放在内存里。
从稳定性来说,当然是放在数据库里最稳定,这个理论上来说不存在Session丢失的可能性;最差的是进程内的Session, 工作进程一旦挂掉,Session就全丢失。ASP.Net State Server也是介于两者之间。
由此看来抛开使用第三方Seesion解决方案的情况不看,使用ASP.NET State Server是一种从性能和稳定性来说都算折中的方案。
不过在切换到ASP.NET State Server前还需要注意,如果Session里存放了非.Net原生类型的数据(也就是用户自定义类型),需要将类标识为可序列化(Serializable),因为ASP.NET会通过二进制序列化来将对象
序列化后再发送到ASP.NET State Server保存。同时,记得放开防火墙对ASP.NET State Server使用的端口的限制(默认是42424端口,可以修改);还有就是ASP.NET State Server提供了几个用于监控性能的
性能计数器,可以通过性能监视器实时查看ASP.NET State Server的运行状况。
关于ASP.NET Session State Server的更多相关文章
- Unable to make the session state request to the session state server处理
Server Error in '/' Application. Unable to make the session state request to the session state serve ...
- 在IIS上发布项目后浏览时报的错:Unable to make the session state request to the session state server
错误描述: Unable to make the session state request to the session state server. Please ensure that the A ...
- Unable to make the session state request to the session state server处理方法
Server Error in '/' Application. Unable to make the session state request to the session state serve ...
- 转: 解决【Unable to make the session state request to the session state server】
错误描述: Unable to make the session state request to the session state server. Please ensure that the A ...
- ASP.NET State Server 服务 sessionState
在发布ASP.NET网站的时候,出现state server错误:Server Error in '/' Application.----------------------------------- ...
- 在发布ASP.NET网站的时候,出现state server错误
错误信息如下: 在发布ASP.NET网站的时候,出现state server错误: Server Error in '/' Application. ------------------------- ...
- what is diff. b/w app state & session state
Application state is a data repository available to all classes in an ASP.NET application. Applicati ...
- 如何应对Session丢失》》State Server
Session丢失已经是一种习以为常的问题了,在自己也了解一些如何解决的问题,但是也一直没有机会去用,现在由于新的项目要在B/S下开发,所以不得不让我考虑Session的问题. 解决session丢失 ...
- 使用SQL Server存储ASP.NET Session变量
创建和配置ASP.NET Session状态数据库 在基于NLB(网络负载平衡)环境下的ASP.NET Web应用程序开发,我们需要将Session存储在数据库中供多个Web应用程序调用,以下为配置方 ...
随机推荐
- HDOJ1020 Encoding
Problem Description Given a string containing only 'A' - 'Z', we could encode it using the following ...
- 用Objective-C的Category特性添加类的属性
http://www.cnblogs.com/wupher/archive/2013/01/05/2845338.html Category是Objective-C中常用的语法特性,通过它可以很方便的 ...
- XML文档部署到Tomcat服务器上总是加载出错
config.xnl 起初文档路径是在src/Dao/config.xml 在Dao目录下BaseDao类中,解析config.xml文件路径 path="/Dao/config.xml&q ...
- sql2005如何附加数据库
1.首先把mdf(数据库主文件)和ldf(数据库日志文件)放到C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\Data 2.登陆sq ...
- StrutsPrepareAndExecuteFilter(转)
http://www.iteye.com/topic/829843 一.概述 Struts2的核心是一个Filter,Action可以脱离web容器,那么是什么让http请求和action关联在一起 ...
- OOP 概述
面向对象程序设计基于四个基本概念:数据抽象.封装.继承和动态绑定. 类的基本思想是数据抽象和封装. 1 数据抽象 数据抽象是一种依赖于接口和实现分离的编程技术.类的接口包括用户所能执行的操作:类的实现 ...
- Java实现常见排序算法
常见的排序算法有冒泡排序.选择排序.插入排序.堆排序.归并排序.快速排序.希尔排序.基数排序.计数排序,下面通过Java实现这些排序 1.冒泡排序 package com.buaa; import j ...
- CUDA与VS2013安装
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- HTML的Get方法URL传递中文参数,解决乱码问题
本例中有使用JQuery. 资料参考:http://www.cnblogs.com/babycool/p/3169058.html 发送的HTML页面代码: <!DOCTYPE html> ...
- 利用DIV,实现简单的网页布局
<html lang="en"><head> <meta charset="UTF-8"> <title>GIS ...