【发布时间】:2012-08-06 13:16:06
【问题描述】:
我目前正在为一家软件公司开发一个网站。我有一种机制,在页面加载后立即运行(在 Page_OnLoad,Masterpage 代码文件中),创建一个自己的类的新实例并从那里运行一个函数。 几个星期以来一切都运行良好,我在网站上工作的页面/区域完全不同,不会以任何方式影响我目前的事业。
于是发生了以下事情: 我在 asp.net 开发服务器上尝试了该网站:一切都很好并且工作正常。所以我将它上传到我的 IIS 服务器。访问网站:一切仍在运行,没有错误。 大约 20 分钟后,我刷新了页面:NullReferenceException,不知从何而来。而现在,无论我做什么,我都无法摆脱它。
这是来自堆栈的消息:
[NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.]
EITS.WWW.Helper.cUserLog.TrackUserLog(HttpRequest request) in C:\EIT\Projekte\eits.ch\www.eits.ch\EITSWeb\www.eits.ch\Includes\cUserLog.cs:72
EITS.WWW.IndexMaster.Page_Load(Object sender, EventArgs e) in C:\EIT\Projekte\eits.ch\www.eits.ch\EITSWeb\www.eits.ch\Index.Master.cs:22
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +24
System.Web.UI.Control.LoadRecursive() +70
System.Web.UI.Control.LoadRecursive() +189
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3063
母版页代码文件:
http://codetidy.com/3244/
被调用的类:
http://codetidy.com/3245/
【问题讨论】:
-
您是否尝试在 cUserLog.cs 的第 72 行附近添加粒度日志记录?理想情况下,将每个复合操作分解为步骤,以便您可以看到它何时失败等? (注意:不要相信行号是精确的——它们可能会有点不同,但应该接近)
-
问题是,当我使用中断调试代码/一步一步地移动代码时,一切运行正常。
-
@user1450661:“当我使用中断调试代码/逐步浏览代码时,一切运行良好”。我假设你在你的开发机器上这样做,因为我怀疑你在生产网络服务器上运行 Visual Studio。但不是直播服务器的问题吗?大概代码是一样的,但是数据呢?如果您有不同的数据库进行调试,则不能假设正在执行相同的代码分支。
-
感谢您提供该链接。那里非常有用的信息!但我肯定知道 NullReferenceException 是什么,以及导致它的原因。但我不明白为什么我的实例在这种情况下为空,错误发生的地方主要是:为什么它完全突然发生?
标签: c# asp.net iis web-applications webserver