2011-12-14 44 views
0

使用IIS 7,ASP.NET MVC 3,和EF 4.2,我加載內容從數據庫然後將其發送給客戶端(沒什麼好奇怪的還):ASP.NET 4,Entity Framework 4.2,IIS 7:只有通過重新啓動IIS才能解決的錯誤行爲?

var result = DB.Contacts.Select(p => new { id=p.ID, name=p.name }).ToList(); 
return Json(result); 

我們測試它,同意了,並有它運行在客戶。這是它正常的返回信息:

"[{"id":1,"name":"one"},{"id":2,"name":"two"}]" 

這是它發回時,它的故障,這不會停止,直到我們重新啓動IIS服務(WWW):

"[{"id":null,"name":null},{"id":null,"name":null}]" 

我們避風港」我們可以有意識地重現這個問題,但是一旦我們在Windows 7的VS 2010中進行調試,調試器會隨機地跳過代碼,從第四行跳到第一行,退出函數,返回在功能等。

什麼會導致這種情況,你如何避免它?我們在幾個不同的客戶位置上的幾個不同的服務器和工作站上體驗到這一點。在大多數情況下,SQL Server 2008或2005年在同一臺機器上運行IIS 7

+1

在您的匿名對象中,您正在使用`text`屬性,而在JSON中顯示的是`name`。這是一個錯字嗎?你的`Contact`對象的`ID`屬性是一個可爲空的整數? – 2011-12-14 16:47:14

+2

您是否爲每個請求創建新的數據上下文?或者你是否在多個請求中共享上下文(使用靜態,全局變量或單例?) – 2011-12-14 17:03:05

回答

2

在調試器中跳來跳去的東西時,我看到:

  • 「要求源代碼以匹配」是殘疾人
  • 調試器使用了錯誤的符號(PDB)文件
  • 裝配建於發佈模式

一個我發現有用的東西就是打開在VS「模塊」視圖和使確保你正在調試的程序集的PDB文件是正確的。 DLL上的時間戳會告訴你它是正確的還是隻知道路徑(取決於你如何調試站點)

沒有更多的上述.NET代碼的上下文,很難說。也許有什麼東西正在消滅你的會話......並且該網站不重新初始化東西,直到你回收應用程序池或IIS。

祝你好運!

編輯:其他一些想法是用負載測試器命中頁面/站點,並在調用Json(..)之前立即放入某些日誌記錄或斷言,以檢查匿名對象中的空值。聽起來像是一個老化的問題,在應用程序被使用了一段時間之後,這個問題會不斷增加。如果是這種情況,可以通過適當的負載測試重現。