关于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应用程序调用,以下为配置方 ...
随机推荐
- 从PowerDesigner概念设计模型(CDM)中的3种实体关系说起
转:http://www.cnblogs.com/xingyukun/archive/2007/08/02/840293.html CDM是大多数开发者使用PD时最先创建的模型,也是整个数据库设计最高 ...
- winphone 开发学习笔记(1)
学习了winphone task 1.首先根据自己电脑下载sdk,,,win 7和win 8的Sdk安装包不一样, http://www.microsoft.com/en-hk/download/de ...
- php 下载
$file='url.xlsx'; if (file_exists(EA_DIR_DATA . $file)) { header('Content-Description: Fi ...
- 开源sip server & sip client 和开发库 一览
http://www.voip-info.org/wiki/view/Open+Source+VOIP+Software http://blog.csdn.net/xuyunzhang/article ...
- gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架
gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 Google Guava官方教程(中文版 ...
- Xcode7.1与iOS9之坑
一.更改http为https 两种方案: 公司后台服务器更改; 作为开发者,可在Xcode暂时退回到http协议. 开发者更改方法如下: 在Info.plist中添加App Transport Se ...
- 国内maven 仓库
国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用.osChina 貌似仓库一年前关闭了 repo2<mirror> <id>re ...
- DataGridView 添加行 分类: DataGridView 2014-12-07 08:49 263人阅读 评论(0) 收藏
说明: (1)dgvGoods 是DataGridView名 (2)index 是最大行索引 一. DataGridViewRow row = new DataGridViewRow(); int i ...
- 【设计模式 - 6】之桥接模式(Bridge)
1 模式简介 举个例子,人.车和公路是三个维度,人开着车在公路上行驶,就是将这三个维度进行了关联.人分男人(Man)和女人(Woman),车分小轿车(Car)和公共汽车(Bus),公路分市区 ...
- hibernate之自定义持久化实现