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%myObjectnull,当再次刷新页面时,它可能是我再次放入会话的对象。

这怎么可能?我该怎么办?

它出现在不同的浏览器上。因此,即使是公司的IE7也不应该成为问题的一部分。我尝试了各种会话超时时间,但是。。。没有什么

IIS ASP.net会话有5%的时间泄漏/丢失值

可能"有时"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