C# 与会话数据集一起使用时发生对象引用错误

C# 与会话数据集一起使用时发生对象引用错误,c#,asp.net,C#,Asp.net,我上周一直在使用下面的代码,它工作正常,但由于某种原因,今天早上它抛出了: System.NullReferenceException:对象引用未设置为对象的实例 我的代码: DataSet icanData = (DataSet)HttpContext.Current.Session["icanDataSession"]; if (!(icanData == null)) { return icanData; } 我之所以使用HttpContext.Current.Session是

我上周一直在使用下面的代码,它工作正常,但由于某种原因,今天早上它抛出了:

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

我的代码:

DataSet icanData = (DataSet)HttpContext.Current.Session["icanDataSession"];
if (!(icanData == null))
{
     return icanData;
}
我之所以使用
HttpContext.Current.Session
是因为它在类中运行。

看起来像
Session[“icanDataSession”]已丢失


在您的代码中,它设置在哪里?可能最初存储在IIS中的任何会话都已通过应用程序池回收丢失

将会话对象强制转换到数据集之前检查会话为空

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

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

您声明要调用ASPX文件顶部的
公共静态数据集IcanData()
。相反,从
Page\u Load
事件调用该方法。在您访问会话的时间点,它将不可用


有关会话为何可以为null的信息可以在以下问题中找到:

在不同的线程中运行此代码?您需要检查
HttpContext.Current.session==null
,而不是
HttpContext.Current==null
。如果会话为null,则可能会指向其他问题。我通过添加以下内容“If(HttpContext.Current!=null&&HttpContext.Current.session!=null)”停止了出错,但是我认为它不再将数据集存储在会话中了。您是从页面生命周期的哪个部分执行此操作的<代码>页面加载
?你能看一下我的答案吗?我想它涵盖了你最终解决问题的方法。好吧,我使用了你的一些代码和Anant Dabbi的一些代码,所以我现在有一行“if(HttpContext.Current!=null)”,但是我仍然收到相同的错误。它被一个.aspx文件调用,值得注意的是,它整个星期都运行良好如果它没有设置,我填充数据集,然后在底部,我在返回数据集之前设置了它。我还没有真正找到解决方案,所以我不能真正接受上面的任何答案。我对它进行了排序,似乎如果我在页面上创建数据集的实例作为private,它就会被杀死。我相信你们现在都在摇头,想着“学童”的错误,但谢谢你们的帮助