我有一個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