我有一个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
它看起来就像你有一个枚举集合(名单?)是调用.Where(...),但收集为空。最有可能在Rework方法调用中。检查它是否有这样的事情,并追溯到它应该填充的地方。从那里你应该对发生的事情有更好的了解。你的连接字符串是否正确? –
asawyer
2011-03-01 14:01:02
是的,我有一个正在填充的列表,它在开发上工作正常,但在生产炸弹时,代码没有任何错误,并且与db的连接工作正常,这很令人费解 – Jimmy 2011-03-01 15:24:46
你绝对确定它已被填充?放置一个空检查并将结果写入ViewData [],然后将其写入屏幕以验证它。 – asawyer 2011-03-01 15:30:30