ASP.NET应用中会话状态丢失及解决策略
会话易丢失,解决办法
一.
了解下Web园
一个应用程序池默认是开启一个工作进程,但也可以开启多个工作进程,这样可提高性能,这个功能名为Web园,是小型的“Web农场”,您无需使用多台计算机来传送相同内容(Web农场),而是可以使用一台计算机中的多个进程来传送相同内容。
配置Web园:
IIS->应用程序池->选中使用的应用程序池->右键属性->性能->Web园->最大工作进程数
设置最大进程数大于1,如果这个值大于1,每个请求将启动一个新的工作进程实例,可启动的最多进程数位您所设置的进程数,最大可设置为4000000.后续请求将以循环的方式发送至工作进程。但使用Web园要考虑以下两点:
- )每一个工作进程都会消耗系统资源和CPU占用率,太多的工作进程不仅会导致系统资源和CPU利用率急剧消耗,还会造成资源竞争;
- )每一个工作进程都具有自己的状态数据,由于请求以循环的方式路由到应用程序池工作进程,这就造成数据不一致,比如session丢失等;
还有些朋友发现有多个w3wp进程,很不理解,有些朋友甚至认为是病毒。其实这完全和Web园的设置有关,一个工作进程就是一个w3wp.
二.
ASP.NET提供了5种会话状态选项:
InProc
StateServer
SQLServer
Custom
Off
1. InProc
InProc选项支持在进程内保存会话状态,实际上是在w3wp.exe工作进程中保存会话状态。这意味着保存会话状态数据将分别保存在每台服务器中,因此其他服务器无法访问当前服务器会话状态数据。这还意味着一个应用程序池回收操作将导致会话状态的丢失。在不考虑Off选项的情况下,这种解决方案运行速度最快,但是,除非我们应用粘性会话机制,否则这种解决方案无法在Web farm环境中正常工作。如果使用了粘性会话机制、同时没有使用Web garden的话,那么InProc是一个可行的解决方案。
如果需要在web.config文件或者其他配置文件中设置会话状态,可以在配置文件的<system.web>配置节中添加一个sessionState标记,如下面的代码所示。
<configuration>
<system.web>
<sessionState mode="InProc" />
</system.web>
</configuration>
2. StateServer
StateServer是微软公司提供的另一种解决方案,但是这种解决方式没有提供故障转移的功能。当在服务器中成功地安装了ASP.NET之后,Windows Services将增加一项名为ASP.NET State Service的服务,默认情况下,这个服务处于禁用状态,但是可以随时启用这项服务。我们需要将该服务的启动模式设置为Automatic,这样每次系统重启时,这项服务都会自动启动。
设置步骤: Run->services.msc->ASP.NET 状态服务(启用,并,设置自动)(找到服务,按名称排序)
默认情况下,ASP.NET SessionState服务是无法远程访问的,如果需要远程运行ASP.NET SessionState服务,那么需要在注册表中将HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection的值设为1。
<sessionState mode="StateServer" />
如果不打算在本地服务器中使用默认的状态服务器,那么可以根据需要设置参数。<sessionState mode="StateServer" stateConnectionString="
tcpip=10.0.0.10:42424" />
本地服务器有时会出现:
HTTP 错误 500.0 - Internal Server Error
调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "C:\PHP\php5isapi.dll" 上
此时在该文件夹加入匿名用户的只读访问权限
3. SQLServer
微软提供的第三个解决方案是SQLServer会话状态。如果当前应用程序运行环境中使用了一个SQLServer群集,那么这种解决方案是一种非常合适的解决方案。与其他方案相比,SQLServer会话状态的性能开销最高,但是因为SQLServer会话状态提供了冗余支持,所以这种方案对性能的影响也是微不足道的。在部署这种解决方案之前,请务必确保系统性能能够满足当前应用程序的要求,同时,还要保证系统具有良好的可伸缩性。
SQL Server会话状态的配置较为复杂,需要使用aspnet_regsql.exe工具
4. Custom
ASP.NET支持实现自定义的会话状态提供程序。所以,可以实现一种不同于微软解决方案的方案。与其他选项类似,一旦成功地开发了自定义的解决方案并将其安装部署到服务器中之后,那么,我们必须对网站的web.config文件以及应用程序根目录下的web.config文件进行更新,使之指向自定义的提供程序。
5. Off
可以完全关闭会话状态,在某些情况下这样做是有意义的,因为启用会话状态后,即使我们没有使用会话状态,系统性能也会有所下降。为了关闭会话状态,我们可以按照"InProc"一节的内容进行操作,唯一不同之处是选择Off而不是选择In Process。在IIS Manager中,这种做法被称为Not enabled。
三、
第三方会话状态解决方案
ScaleOut Software(www.scaleoutsoftware.com)和Alachisoft(www.alachisoft.com)是两家著名的第三方软件厂商,致力于提供Web farm会话状态解决方案。这两家第三方软件厂商的产品均可以应用于高可用、高可伸缩性的Web farm系统,并且可以在进程内保存会话状态数据,同时支持立即复制所有的修改;此外,产品还支持在进程外保存会话数据,为了在进程外保存会话数据,需要使用运行在所有服务器中的自定义工作进程。
ASP.NET应用中会话状态丢失及解决策略的更多相关文章
- iis7中session丢失的解决方法小结
这篇文章主要介绍了在windows server 2008系统中,session丢失的解决方法,供大家学习参考 问题描述: Windows Server 2008 +IIS +ASP.net +SQL ...
- IFrame中Session丢失的解决办法
1.打开IIS管理器 inetmgr2.选择被嵌入iframe源站点或者目录,右键点击打开属性框3.切换到HTTP头4.添加5.自定义HTTP头名: P3P6.自定义HTTP头值: CP=" ...
- [译]ASP.NET Core中使用MediatR实现命令和中介者模式
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9866068.html 在本文中,我将解释命令模式,以及如何利用基于命令模式的第三方库来实现它们,以及如何 ...
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...
- Asp.Net保存session的三种方法 (Dll文件更新导致session丢失的解决办法)
1. InProc模式(默认值):asp.net将session保存到当前进程中,这种方式最快,但是不能多台服务器共享session,且会话状态数据容易丢失. <sessionState mod ...
- 为什么我的会话状态在ASP.NET Core中不工作了?
原文:Why isn't my session state working in ASP.NET Core? Session state, GDPR, and non-essential cookie ...
- asp.net MVC中使用Html.Checkbox提示该字符串未被识别为有效的布尔值错误的解决方法
在asp.net MVC中使用Html.CheckBox提交后出现该字符串未被识别为有效的布尔值错误,或从类型“System.String”到类型“System.Boolean”的参数转换失败. 错误 ...
- 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法
单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...
- ASP.NET MVC中对Model进行分步验证的解决方法
原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...
随机推荐
- 如何在centos 6.7 上安装oracle 11gR2
1.软件准备: centos6.7(64位); oracle11gR2((Linux x86-64)) 2.执行如下命令安装好相关的包: yum -y install \ binutils \ com ...
- 基于JS功能强大的日期插件Kalendae
开发中需要一个日期插件,可以在zepto下使用,可以选择日期段,可以设置不可选日期 找到一个完全满足的,并且基于JS不依赖于任何库. 在线演示:http://chipersoft.com/Kalend ...
- swiper
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...
- python subprocess阻塞
import select import os import subprocess import time import fcntl args = ['python','./fetch_file2.p ...
- 许小年:宁可踏空,不可断粮<转>
http://www.daonong.com/g/25/xsqy/2014/0716/51074.html 文│许小年 中欧国际工商学院教授 为什么我们企业的创新能力长期处于低水平呢? 深入观察,内心 ...
- AIDL小结
AIDL : Android Interface Define Language(接口定义语言) Service中跨进程间通信利器.... 一般都会有Client端和Server端(Server端提供 ...
- iOS CoreAnimate
iOS CoreAnimate 东西比较多,这篇笔记是入门用的,主要讲述的是静态的图形绘画处理问题.(当然动画也只是一小部分)理解相关的概念问题: 参考资料 http://segmentfault ...
- Windows 2008 R2 安装 Windows phone 7 开发环境
安装环境:1.Windows server 2008 R22.Visual Studio 2010 SP1 旗舰版 1.下载 WP7 SDK 离线安装包.(话说要选择与 VS2010 相同语言的版本) ...
- 笔试常考的Linux命令大全
1. wc -l 统计一个文件的行数.l-line.-c是字节数,-m是字符数,mc不能同时使用.-L打印最长行的长度. 2. 查看系统进程的命令:ps,查看CPU占用命令:top.df:查看磁盘使用 ...
- Web前端入门必学知识
入门主要有三个部分 一.html+css部分: 1.前端的入门门槛极低,体现在HTML和CSS上运行环境就是浏览器,html+css这部分特别简单,网上搜资料,书籍视频非常多.css中盒 ...