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实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...
随机推荐
- Windows Server 2012重复数据删除技术体验
在企业环境中,对磁盘空间的需求是惊人的.数据备份.文件服务器.软件镜像.虚拟磁盘等都需要占据大量的空间.对此,微软在Windows Server 2012中引入了重复数据删除技术.重复数据删除技术通过 ...
- 串口 COM口 TTL RS-232 RS-485 区别 释疑
Point: 1.串口.COM口是指的物理接口形式(硬件).而TTL.RS-232.RS-485是指的电平标准(电信号). 2.接设备的时候,一般只接GND RX TX.不会接Vcc或者+3.3v的电 ...
- window.frame
定义和用法 frames 属性返回窗口中所有命名的框架. 该集合是 Window 对象的数组,每个 Window 对象在窗口中含有一个框架或 <iframe>.属性 frames.leng ...
- 【转】去掉Sqlite3 数据库中的前后回车换行符(newline)
原文: http://www.blogjava.net/pts/archive/2013/06/10/400... 时间: 2013-06-10 转自:http://www.ityuedu.com/a ...
- 《JavaScript高级程序设计》学习笔记(5)——面向对象编程
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第六章内容. 1.面向对象(Object ...
- 1 《JavaScript高级程序设计》学习笔记(1)
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 首先,我将从<JavaScript高级程序设计>这本JavaScript学习者必看的经典教 ...
- js面向对象的实现(example 二)
//这个方法和上篇文章(js面向对象的实现(example 一))中的方法类似,但是更为简洁 //通过函数赋值的方式来构造对象 //同样通过闭包的方式来封装对象及内部变量 (function () { ...
- php中cookie技术关于跨目录调用cookie值的问题
今天做项目发现了一个奇葩错误,以cookie技术为主,反复测试发现cookie不能跨目录调用. 我在F:wamp\www\test\下面有1.php和2.php其中1.php接受2.php中setco ...
- 查看python api
以下方法可以查看python 的api,包括selenium webdriver,requests等 1.cmd进入dos命令行窗口,输入python -m pydoc -p 2345 (2345 ...
- Json的序列化与反序列化
对于Json的序列化和反序列化,如果自己编写源代码来实现的话,很复杂很烦,所以我采用的是使用别人已经写好的引用文件.这类文件网上有很多,我用的是LitJson,当然Newtonsoft也可以,但后者需 ...