1

我们收到了一个很难找到原因的错误。显示的错误消息是“对象引用未设置为对象的实例”。我明白它在说什么,并且我们找到了 NULL 对象,但我们无法确定它发生的原因。

该应用程序是一个 ASP.NET 4.0 应用程序。登录后,系统会检查 Session_Start() 中设置的 Application 变量。该变量为 null 并导致此错误(有关显示的完整错误消息,请参见下文)。

我们发现这只发生在 32 位虚拟机上。以下是我们测试过的一些:

  • XP 虚拟服务器错误
  • XP 非虚拟 - 有效
  • 2003 32 位虚拟服务器错误
  • 2003 32 位非虚拟 - 作品
  • 2008 64 位非虚拟 - 作品
  • 2008 32 位虚拟服务器错误
  • 2008 64 位虚拟 - 作品

我们通过将整个项目移动到虚拟机进行测试,并使用 VS 2010 Express 对其进行编译。然后该应用程序正常工作。然后该应用程序正常工作。因此,如果预编译这个应用程序,在 32 位虚拟机上,似乎会出现 NullReferenceException 错误。

由于我们已经证明这适用于大多数机器,我们确信它不是代码。我们现在需要检查什么?虚拟机上是否有未安装的东西?任何关于寻找或尝试的建议将不胜感激。如果您需要我澄清某些事情或提供更多信息,请告诉我。

“/TestSite”应用程序中的服务器错误。你调用的对象是空的。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。

源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[NullReferenceException: 对象引用未设置为对象的实例。]
HomeMasterPage.Page_Load(Object sender, EventArgs e) +204
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) + 14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +91
System.Web.UI.Control.LoadRecursive() +74 System.Web .UI.Control.LoadRecursive() +146 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint) +2207

版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.1

评论后更新

void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
        ArrayList ArrActiveUser = new ArrayList();
        Application["ArrActiveUser"] = ArrActiveUser;
    }

...


    void Session_Start(object sender, EventArgs e) 
    {
        // Code that runs when a new session is started
        ArrayList ActiveUsers = new ArrayList(); 
        if (Application["ArrActiveUser"] != null)
        {
            ActiveUsers = (ArrayList)Application["ArrActiveUser"];
        }
        ActiveUsers.Add(Session.SessionID);
        Application["ArrActiveUser"] = ActiveUsers;
    }
4

1 回答 1

0

你在使用状态服务器吗?我相信,除非您的会话状态为 inProc,否则 Session_Start / Session_End 永远不会被解雇。

于 2012-07-31T16:31:37.663 回答