我在我的应用程序中似乎随机地获得了 NullReferenceExeceptions,并且无法追踪可能导致错误的原因。
我会尽力描述场景和设置。
非常感谢任何和所有建议!
C# .net 3.5 表单应用程序,但我使用由 Phil Haack ( http://haacked.com/archive/2008/03/11/using-routing-with-webforms.aspx ) 构建的 WebFormRouting 库来利用路由库.net(通常与 MVC 结合使用)——而不是对我的 url 使用 url 重写。
我的数据库有 60 个表。全部归一化。这只是一个庞大的应用程序。(SQL 服务器 2008)
所有查询均使用 Linq to SQL 在代码中构建(无 SP)。每次创建我的数据上下文的新实例时。我只使用一个数据上下文,所有关系都在 SQL Server 的 4 个关系图中定义。
数据上下文被创建了很多。我让数据上下文的关闭自动处理。我已经听到双方关于你应该离开自动关闭还是自己做的争论。在这种情况下,我不会自己做。
我是创建很多数据上下文实例还是只创建一个实例似乎并不重要。
例如,我有一个投票按钮。使用以下代码,它可能会出错 10-20 次。
protected void VoteUpLinkButton_Click(object sender, EventArgs e)
{
DatabaseDataContext db = new DatabaseDataContext();
StoryVote storyVote = new StoryVote();
storyVote.StoryId = storyId;
storyVote.UserId = Utility.GetUserId(Context);
storyVote.IPAddress = Utility.GetUserIPAddress();
storyVote.CreatedDate = DateTime.Now;
storyVote.IsDeleted = false;
db.StoryVotes.InsertOnSubmit(storyVote);
db.SubmitChanges();
// If this story is not yet published, check to see if we should publish it. Make sure that
// it is already approved.
if (story.PublishedDate == null && story.ApprovedDate != null)
{
Utility.MakeUpcommingNewsPopular(storyId);
}
// Refresh our page.
Response.Redirect("/news/" + category.UniqueName + "/"
+ RouteData.Values["year"].ToString() + "/"
+ RouteData.Values["month"].ToString() + "/"
+ RouteData.Values["day"].ToString() + "/"
+ RouteData.Values["uniquename"].ToString());
}
我尝试的最后一件事是 SQL Server 上的“自动关闭”标志设置。这被设置为真,我改为假。虽然整体效果不错,但似乎没有成功。
这是一个没有被抓住的细节。当我的 try/catch 捕获时,我也会得到稍微不同的错误。
System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. --->
System.NullReferenceException: Object reference not set to an instance of an object. at
System.Web.Util.StringUtil.GetStringHashCode(String s) at
System.Web.UI.ClientScriptManager.EnsureEventValidationFieldLoaded() at
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) at
System.Web.UI.WebControls.TextBox.LoadPostData(String postDataKey, NameValueCollection postCollection) at
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) at
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) --- End of inner exception stack trace --- at
System.Web.UI.Page.HandleError(Exception e) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest() at
System.Web.UI.Page.ProcessRequest(HttpContext context) at
ASP.forms_news_detail_aspx.ProcessRequest(HttpContext context) at
System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
帮助!!!