0

上周我一直在使用以下代码,它的工作没有问题,然后由于某种原因今天早上它抛出:

System.NullReferenceException:对象引用未设置为对象的实例。

我的代码:

DataSet icanData = (DataSet)HttpContext.Current.Session["icanDataSession"];
if (!(icanData == null))
{
     return icanData;
}

我使用的原因HttpContext.Current.Session是因为它在一个类中运行。

4

4 回答 4

1

好像Session["icanDataSession"];已经丢失了。

它在您的代码中的哪个位置设置?也许最初存储在 IIS 中的任何会话都已通过应用程序池回收丢失。

于 2012-10-12T10:46:30.787 回答
0

在将会话对象转换为数据集之前检查会话是否为空

if(HttpContext.Current.Session["icanDataSession"]=!null)
{
  DataSet icanData = (DataSet)HttpContext.Current.Session["icanDataSession"];
  if (!(icanData == null))
   {
     return icanData;
   }
}
else 
{
return new Dataset();
}
于 2012-10-12T10:49:38.620 回答
0

我认为,如果此代码由 aspx.cs 调用,那么它将正常工作。但是如果这被任何无状态服务调用,那么它会像你报告的那样抛出错误。最好先检查 if(HttpContext.Current != null) ..

于 2012-10-12T10:49:57.843 回答
0

您说您public static DataSet IcanData()在 ASPX 文件的顶部调用。Page_Load相反,请从您的事件中调用该方法。在您访问会话的时间点,它将不可用。

关于为什么会话可以为空的信息可以在这个问题中找到:如果当前的 ASP.NET 会话为空,我应该怎么做?

于 2012-10-12T12:24:59.660 回答