2011-03-01 117 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