ASP.Net字符串分配失败

时间:2010-08-16 14:11:59

标签: asp.net vb.net

这是我在这里发表的第一篇文章,所以对我很轻松:)我在ASP.Net页面遇到了一个奇怪的问题。在为变量分配字符串文字时,我得到的对象没有设置错误消息。这是我得到的错误。

  

[NullReferenceException:Object   引用未设置为的实例   对象。]
  Project.Page.Page_Load(对象发送者,   EventArgs e)in   C:\项目\ Page.aspx.vb:10
  System.Web.UI.Control.OnLoad(EventArgs的   e)+91
  System.Web.UI.Control.LoadRecursive()   +74 System.Web.UI.Page.ProcessRequestMain(布尔值   includeStagesBeforeAsyncPoint,Boolean   includeStagesAfterAsyncPoint)+2207

这是错误指向的代码。这个片段的最后一行是错误抱怨的第10行

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

  Dim teststring As String
  teststring = "test"

它似乎无法访问任何引用类型,即使它是在load函数中本地声明的。当Request.IsSecureConnection在我身上退出时,我最初发现了这个问题。我最终发现我可以用上面的代码替换它并以同样的方式失败。

问题并非总能发生。它似乎是通过从Visual Studio发布更新来触发的,或者当我回家当天并且服务器整夜闲置时。一个或两个应用程序池回收似乎清除它,页面正常运行。

非常感谢任何帮助。我已经做了几年的桌面开发,但我对Web开发还很陌生。所以也许这是显而易见的,我配错了。我目前在IIS 6上使用.Net 4。

更新

我能够使用复制页面的建议识别该行,将所有内容评论出来,然后一次取消注释一行。我的测试页开始给出错误的那一行是

  

Dim StateName As String = State.Attribute(XName.Get(“name”))。Value

该代码位于IEnumerable(XElement)的foreach中。堆栈跟踪仍然指向字符串赋值,但所有其他堆栈跟踪都是正确的,因此我认为这不是一个糟糕的pdb。

此外,当这次发生错误时,没有回收应用程序池或停止和启动它的数量将修复错误。我终于通过将应用程序切换到另一个应用程序池来重新运行。

2 个答案:

答案 0 :(得分:0)

我没有看到该代码如何抛出空引用异常,你确定它不是其他代码,但异常消息指向错误的位置,因为你的pdb文件已经过时了。根据您的描述,最有可能成为错误代码的候选者是访问应用程序变量的一些代码,该应用程序变量已经变为空,因为应用程序池由于超时而重新发布,或者因为您重新发布了Web应用程序。

答案 1 :(得分:0)

尝试将字符串声明为常量...只是为了放大问题

Dim Const TESTSTR as String = "test"
Dim teststring As String
teststring = TESTSTR

如果这不起作用,请将Const声明移到全局某处。也许这与.NET存储字符串本身变得无效的方式/位置有关。

每次发布​​时尝试手动回收页面...也许这是预编译代码在更新后延迟的问题?我承认,这是一个令人头疼的问题,像这样的一条线应该永远不会失败。