我有一个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
答案 0 :(得分:1)
需要考虑的一些事项:
答案 1 :(得分:1)
你是jperrine251吗?如果那不是您,则您的代码不会在服务器上运行。从我可以告诉它看起来你的错误处理代码正在做一些不在生产中的假设,整个事情是轰炸。在你的错误处理方面要非常防守。
从ErrorVM和ClaimsController发布适用的代码也会有所帮助。
答案 2 :(得分:0)
该位置是编译代码的位置,因此它具有您的开发路径(而不是生产框,因为源代码永远不会出现在该框中)是正常的。
就错误而言,看起来你在ErrorVM中有一个空引用
ViewModels\ErrorVM.cs:line 26 at
可能是在显示错误视图(?)
的过程中正在编写原始错误答案 3 :(得分:0)
我发现了问题,看起来数据库中缺少一些预计存在的数据,感谢所有人的帮助