IIS ASP.net会话有5%的时间泄漏/丢失值
本文关键字:泄漏 时间 net ASP 会话 IIS | 更新日期: 2023-09-27 18:22:09
我使用的是带有.NET Framework 3.5 SP1的IIS V6.0和ASP.NET。
一天中的大部分时间,我都在修复与ASP.NET在请求之间丢失会话变量有关的问题。这很令人沮丧。
例如:我有A页和B页。当A用给B一个自己类的对象时
Session["something"] = myObject; //on Page A
而Page B想这样使用它:
MyOwnClass myObject= Session["something"] as MyOwnClass;
大约95%的时间都是这样。但是B上的另外5%myObject
是null
,当再次刷新页面时,它可能是我再次放入会话的对象。
这怎么可能?我该怎么办?
它出现在不同的浏览器上。因此,即使是公司的IE7也不应该成为问题的一部分。我尝试了各种会话超时时间,但是。。。没有什么
可能"有时"myObject不是MyOwnClass
类型,因为如果发生这种情况,您将使用安全强制转换,因此您不会得到异常(如果对象不是"Castable",则安全强制转换将返回null)。尝试使用显式强制转换:
try{
MyOwnClass myObject=(MyOwnClass)Session["something"];
}
catch(InvalidCastException ex){
//handle the exception
}
如果这不能解决你的问题,你必须确保:
- 您没有重新启动应用程序池
- 您不会更改web配置中的任何内容
- 网络农场和网络花园:如果你已经为你的网站配置了网络农场和网站花园。Inproc会话共享可能会导致问题
- 由于代码中的一些问题,您的网站的w3p进程正在重新启动。或内存泄漏
我的第一个猜测是,您正在使用InProc会话状态,当应用程序池回收时,您将丢失会话中的内容。
以下是II6将InProc更改为StateServer的指南:http://dotnetguts.blogspot.com/2009/06/steps-for-session-inproc-mode-to.html