ASPNET MVC奇怪的生产错误

时间:2011-03-01 13:54:18

标签: asp.net-mvc

我有一个ASPNET MVC应用程序在本地工作正常,但当我将其部署到生产时,我得到以下堆栈跟踪。

关于这个堆栈跟踪有一些令人费解的事情,因为在部署我的更改之前一切正常,两个代码的位置是错误的,它现在在生产服务器上而不是我的开发机器和三个{{1是一个控制器方法,而不是一个对象

Rework

有人有什么想法吗?

编辑:堆栈跟踪中的相关行是这个

2/28/2011 11:03:47 PM COB_Database.Controllers.ClaimsController Rework Object reference
not set to an instance of an object.    at COB_Database.ViewModels.ErrorVM.
<>c__DisplayClass12.<.ctor>b__1(Error err) in 
C:\Users\jperrine251\documents\visual studio 2010\Projects\COB Database\COB 
Database\ViewModels\ErrorVM.cs:line 26     at 
System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()     at 
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)     at 
System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)     at 
COB_Database.ViewModels.ErrorVM..ctor(User user, Claim claim, IEnumerable`1 actions, 
IEnumerable`1 users, IEnumerable`1 referralReasons, Boolean editing) in 
C:\Users\jperrine251\documents\visual studio 2010\Projects\COB Database\COB 
Database\ViewModels\ErrorVM.cs:line 26     at 
COB_Database.Controllers.ClaimsController.Rework(Int32 id) in 
C:\Users\jperrine251\documents\visual studio 2010\Projects\COB Database\COB 
Database\Controllers\ClaimsController.cs:line 160     at lambda_method(Closure , 
ControllerBase , Object[] )     at 
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] 
parameters)     at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 
controllerContext, IDictionary`2 parameters)     at 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext 
controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)     at 
System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.
<InvokeActionMethodWithFilters>b__12()     at 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, 
ActionExecutingContext preContext, Func`1 continuation)     at 
System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.
<InvokeActionMethodWithFilters>b__14()     at 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext 
controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 
parameters)     at 
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext 
controllerContext, String actionName) 

UsersErrors = claim.Errors.Where(err => err.UserID == user.id && err.ErrorActionID != null && err.ErrorActionLogs.OrderByDescending(eal => eal.id).FirstOrDefault().Timestamp >= DateTime.Now.AddHours(-10)).ToList(); 定义为UsersErrors

我尝试将代码更改为此但仍然没有运气:

List<Error> UsersErrors

编辑,我已经隔离了引起问题的行,我把上面的代码分解成谓词并将它们传递给我的linq表达式,以下是失败的(但是在本地工作)

var userErrors = claim.Errors.Where(err => err.UserID == user.id && err.ErrorActionID != null &&
    err.ErrorActionLogs.OrderByDescending(eal => eal.id).FirstOrDefault().Timestamp >= DateTime.Now.AddHours(-10));
UsersErrors = userErrors == null ? new List<Error>() : userErrors.ToList();

错误记录了对它们采取的操作,这只是抓取最新的并确保它在过去10小时内完成,我已经检查了数据库中我正在测试的记录并且它存在于使用符合要求的错误操作日志

编辑:另外为确保Func<Error, bool> errorLogp = (err) => err.ErrorActionLogs .OrderByDescending(eal => eal.id) .FirstOrDefault().Timestamp >= DateTime.Now.AddHours(-10); 不为空,我已完成以下内容

claim.Errors

但代码仍然在UsersErrors = Claim.Errors == null ? new List<Error>() : Claim.Errors.Where(err => errorp(err) && errorLogp(err)).ToList(); 谓词errorLogp

上爆炸

4 个答案:

答案 0 :(得分:1)

需要考虑的一些事项:

  1. 代码的位置来自您在计算机上编译的PDB(符号)文件。部署到其他环境时,它不会更新。该位置确实为您提供了一个确切的行号来调查,这很好。 (对于将来的生产版本,您需要在发布模式而不是调试模式下编译代码。)
  2. 异常消息是“对象引用未设置为对象的实例”。此异常并未告诉您Rework是一个对象,但在返工操作期间抛出了NullReferenceException。在ErrorVM.cs第26行的某处,你有一个null变量,你正试图访问它的一个成员。

答案 1 :(得分:1)

你是jperrine251吗?如果那不是您,则您的代码不会在服务器上运行。从我可以告诉它看起来你的错误处理代码正在做一些不在生产中的假设,整个事情是轰炸。在你的错误处理方面要非常防守。

从ErrorVM和ClaimsController发布适用的代码也会有所帮助。

答案 2 :(得分:0)

该位置是编译代码的位置,因此它具有您的开发路径(而不是生产框,因为源代码永远不会出现在该框中)是正常的。

就错误而言,看起来你在ErrorVM中有一个空引用

ViewModels\ErrorVM.cs:line 26     at 

可能是在显示错误视图(?)

的过程中正在编写原始错误

答案 3 :(得分:0)

我发现了问题,看起来数据库中缺少一些预计存在的数据,感谢所有人的帮助