session突然丢失引起的思考

本文总结了ASP.NET应用程序中Session丢失的多种常见原因,并介绍了如何通过配置StateServer模式来稳定地保存Session状态,避免因进程重启或更改引起的Session丢失。
前一段时间做一个网站时,遇到session突然丢失的问题,郁闷了好几天,在网上查了查,找了一篇不错的文章与大家分享,这片文章从csdn转载的

大家可在 MSDN 2003 中搜索一下 <sessionState> 即可看到关于 Web.config 中的<sessionState> 节点元素的描述,共有 Off、InProc、StateServer、SQLServer 四种模式。Off、InProc 分别指“不启用”、“进程内保存(默认值)”,此两种模式没啥讲的,所谓 InProc 就是把 Session 保存在 aspnet_wp.exe (Windows 2000 解析 ASP.NET页面所用的进程) 或 w3wp.exe (Win2003 的进程) 中,一旦进程被中止或被重置,Session 将丢失。

一、        引发 Session 丢失的几种原因

动过手写代码的人都知道,Session 丢失是比较常见的事。以下是本人这几年所遇到的,能够引发 Session 丢失的原因,不敢说是百分百,丢失概率还是特别高的。错…,简直可以说是“相…当…”高哇 ^_^"

1、    存放 Session 的电脑重启(废话,若这样都不丢,你神仙啊)

2、    InProc 模式:aspnet_wp.exe 或 w3wp.exe 在“任务管理器”中或其它情况下导致其进程被终止运行。

3、    InProc 模式:修改 .cs 文件后,编译了两次(只编译一次,有时不会丢失)

4、    InProc 模式:修改了 Web.config

5、    InProc 模式,Windows 2003 环境:应用程序池回收、停止后重启

6、    InProc 模式:服务器上 bin 目录里的 .dll 文件被更新

以上列举的都是 InProc 模式下,容易引发解析 ASP.NET 应用程序重置的原因。是不是觉得很窝火?之前我也有这种感觉,慢慢就习惯啦,再后来就干脆不用这种模式了。于是乎,就有了使用下列两种模式的尝试,现写出来与大家一起分享。

二、        使用 StateServer 保存 Session

StateServer 模式的实质是,把Session 存放在一个单独的进程里,此进程独立于 aspnet_wp.exe 或 w3wp.exe 。启用此服务后,在“任务管理器”中可以看到一个名为 aspnet_state.exe 的进程,下面开始说明一下设置的具体步骤:

 

1、    修改注册表(关键步骤,如下图)

运行 regedit → 打开注册表 → 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters 节点 → 将 AllowRemoteConnection 的键值设置成“1”(1 为允许,0 代表禁止)→ 设置 Port (端口号)

注意事项:

       a)、若ASP.NET State Service 正在运行,修改注册表内容后,则需要重新启动该服务

b)、注意端口号的键值是以十六进制储存的,可以使用十进制进行修改,42424 是默认的端口

c)、AllowRemoteConnection 的键值设置成“<st1:chmetcnv w:st="on" unitname="”" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1”</st1:chmetcnv>后,意味着允许远程电脑的连接,也就是说只要知道你的服务端口,就可享用你的ASP.NET State Service,即把 Session 存放在你的电脑进程内,因此请大家慎用;键值为“<st1:chmetcnv w:st="on" unitname="”" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0">0”</st1:chmetcnv>时,仅有stateConnectionString 为“tcpip=localhost: <st1:chmetcnv w:st="on" unitname="”" sourcevalue="42424" hasspace="False" negative="False" numbertype="1" tcsc="0">42424”</st1:chmetcnv>与“tcpip=127.0.0.1:<st1:chmetcnv w:st="on" unitname="”" sourcevalue="42424" hasspace="False" negative="False" numbertype="1" tcsc="0">42424”</st1:chmetcnv>的情况,方可使用ASP.<st1:place w:st="on"><st1:placename w:st="on">NET</st1:placename> <st1:placetype w:st="on">State</st1:placetype></st1:place> Service

 

 

2、    开启 ASP.NET State Service(如下图)

右键点击“我的电脑”→ 管理 → 服务与应用程序 → 服务 → 双击“ASP.NET State Service” → 启动(可设为“自动”)

说明:只要安装了 .Net Framework v1.0/v1.1 ,都拥有此服务。

 

更多请察看原文
 

http://blog.youkuaiyun.com/cityhunter172/archive/2006/05/14/727743.aspx
<think>好的,我现在需要解决用户提到的PEX文件加载错误以及部署会话连接失败的问题,尤其是与PIMP-Controller套接字连接相关的问题。首先,我需要回顾用户提供的引用内容,看看是否有相关的解决方案线索。 根据引用[1],用户之前遇到了PreScan与MATLAB仿真视觉传感器的问题,错误是初始化pimp-controller失败。用户尝试降级MATLAB版本但没有解决,引用[2]提到安装顺序和版本匹配的重要性,比如先安装VS2017,再安装MATLAB2019,因为高版本MATLAB可能包含低版本VS的支持,同时建议使用Prescan8.5并处理传感器文件夹的问题。 现在用户的问题是关于PEX文件加载错误和部署会话连接失败,可能涉及PIMP-Controller的套接字连接。我需要将这些信息结合起来,思考可能的解决方案。 首先,PEX文件是Prescan的实验文件,加载错误可能与MATLAB或Prescan的版本兼容性有关。而部署会话连接失败和套接字问题,可能涉及软件组件之间的通信,比如Prescan、MATLAB和Visual Studio之间的接口问题。 根据引用[2],正确的安装顺序和版本匹配是关键。可能需要检查用户的安装顺序是否符合建议,例如先安装Visual Studio,再安装MATLAB,最后安装Prescan。同时,确保MATLAB版本不低于Visual Studio的版本,避免兼容性问题。 另外,用户提到使用Prescan8.5,但高版本可能存在传感器丢失问题,需要复制旧版本的传感器文件夹。如果用户使用的是更高版本的Prescan,可能需要执行此步骤,否则可能导致组件缺失,影响PEX文件的加载。 此外,检查防火墙或安全软件是否阻止了Prescan和MATLAB之间的通信,导致套接字连接失败。可能需要暂时禁用防火墙或添加例外规则。 也可能需要重新配置MATLAB的编译器,使用正确的编译器版本(如引用[2]提到的配置VS或安装相应编译器),但这种方法可能引发其他问题,因此按照引用[2]的建议,重新安装可能是更可靠的方法。 最后,确保所有软件(VS、MATLAB、Prescan)都是完整安装且没有损坏,尤其是Prescan的插件和接口部分。可能需要以管理员身份运行安装程序,或修复安装。 总结可能的解决步骤:安装顺序检查,版本匹配,传感器文件夹处理,防火墙设置,重新安装或修复软件组件。需要逐步验证这些可能性。</think>针对PEX文件加载错误及部署会话连接失败问题,以下是分步解决方案: ### 一、环境配置检查 1. **安装顺序验证** - 严格按照`Visual Studio → MATLAB → Prescan`顺序安装[^2] - 示例版本组合:VS2017 + MATLAB2019b + Prescan8.5 - 注意:MATLAB版本必须≥VS版本(如MATLAB2019包含VS2017支持) 2. **组件兼容性确认** - 检查Prescan安装目录下的传感器文件完整性 - 若使用Prescan>8.5版本,需将8.5版本的`Sensor`文件夹复制到新版安装目录 ### 二、通信设置 1. **网络配置** ```powershell # 以管理员身份执行 netsh advfirewall firewall add rule name="Prescan" dir=in action=allow program="C:\Prescan\bin\prescan.exe" enable=yes ``` - 关闭防火墙或添加白名单 - 禁用第三方安全软件的流量监控 2. **MATLAB编译器配置** ```matlab % 在MATLAB命令窗口执行 mex -setup ``` - 选择与安装的Visual Studio版本匹配的编译器 ### 三、故障排除步骤 1. **注册表修复** - 删除残留注册项:`HKEY_LOCAL_MACHINE\SOFTWARE\MathWorks` - 使用工具:`MATLAB官方卸载工具` 2. **系统环境检查** - 验证环境变量包含: ``` PATH=%Prescan_InstallDir%\bin;%MATLAB_ROOT%\bin;%VS_InstallDir%\VC\bin ``` - 检查`.NET Framework 4.7+`已启用 ### 四、高级解决方案 1. **Socket连接测试** ```python import socket def test_port(port=34217): # Prescan默认端口 with socket.socket() as s: return s.connect_ex(('localhost', port)) ``` - 返回值0表示端口可达 2. **实验文件修复** - 用文本编辑器打开`.pex`文件 - 检查`<Simulation>`节点中的MATLAB路径配置 - 验证`<DeploymentSettings>`中的IP地址为127.0.0.1 ### 五、推荐配置方案 | 组件 | 推荐版本 | 备注 | |-------------|----------------|-------------------------------| | Visual Studio | 2017 Professional | 安装C++桌面开发组件 | | MATLAB | R2019b | 必须包含Simulink和Compiler | | Prescan | 8.5.0 | 需打最新补丁包 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值