2011-03-01 67 views
0

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

关于这个堆栈跟踪有一些令人费解的事情,因为在部署我的更改之前,一切正常,对于两个代码的位置是错误的,它现在在生产服务器上而不是我的开发机器上,对于三个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

我试图改变的代码这一点,但仍然没有运气:

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(); 

编辑,我已经隔离了导致问题的线路,我将上面的代码分解成谓词并将它们传递给我的linq e上的表达,下面是什么是失败的(但在本地工作)

Func<Error, bool> errorLogp = 
    (err) => 
     err.ErrorActionLogs 
      .OrderByDescending(eal => eal.id) 
      .FirstOrDefault().Timestamp >= DateTime.Now.AddHours(-10); 

的错误已日志对他们采取的行动,这只是抓住了最新的,并确保它在过去的10小时内完成,我VE检查了数据库我测试的记录,这是与符合要求

编辑错误操作日志一起存在:也保证claim.Errors不是null我已经做了以下

UsersErrors = Claim.Errors == null ? 
    new List<Error>() : 
    Claim.Errors.Where(err => errorp(err) && errorLogp(err)).ToList(); 

但代码仍然弹出在errorLogp谓词Func

+1

它看起来就像你有一个枚举集合(名单?)是调用.Where(...),但收集为空。最有可能在Rework方法调用中。检查它是否有这样的事情,并追溯到它应该填充的地方。从那里你应该对发生的事情有更好的了解。你的连接字符串是否正确? – asawyer 2011-03-01 14:01:02

+0

是的,我有一个正在填充的列表,它在开发上工作正常,但在生产炸弹时,代码没有任何错误,并且与db的连接工作正常,这很令人费解 – Jimmy 2011-03-01 15:24:46

+1

你绝对确定它已被填充?放置一个空检查并将结果写入ViewData [],然后将其写入屏幕以验证它。 – asawyer 2011-03-01 15:30:30

回答

1

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

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

+0

的内容我是,查看用于爆炸行的errorVM代码的更新,我添加了空值检查依赖对象在那行'用户',它仍然炸弹 – Jimmy 2011-03-01 16:12:21

+0

'claim.Errors'为空? – 2011-03-01 16:21:42

+0

不,一切都在数据库中,这段代码允许编辑以前工作的对象,今天早上我已经使用了这个对象,这是加载编辑和初次处理对象时的相同视图模型 – Jimmy 2011-03-01 16:27:01

1

有几件事情要考虑:

  1. 代码的位置是从您的机器上编译PDB(符号)文件。它在部署到其他环境时不会更新。该位置确实会给你一个确切的行号来进行调查,但这很好。 (对于将来的产品版本,您将希望以发布模式而不是调试模式编译代码。)
  2. 异常消息是“对象引用未设置为对象的实例”。这个异常并没有告诉你Rework是一个对象,但是在返工操作中抛出了NullReferenceException。在ErrorVM.cs的第26行的某个地方,你有一个变量为null,并且你试图访问它的一个成员。
+0

查看该代码的更新以及我将其缩小到 – Jimmy 2011-03-01 16:17:07

0

的位置是编译代码,因此它是正常的,它有你的发展道路(不是生产箱,因为源代码是从来没有在该框中)

至于它看起来错误像你这样的ErrorVM

ViewModels\ErrorVM.cs:line 26  at

内空引用这可能是显示错误观点(的过程中,正在由最初的错误?)

0

我发现这个问题,貌似有一些数据从预计将有数据库缺失,感谢所有帮助大家

+0

尽管如此,请务必阅读并理解迄今为止给出的所有评论和答案。它们包含绝对至关重要的信息,以免再次发生这种情况。 :) – bzlm 2011-03-01 19:09:34