2012-11-19 66 views
1

我們在安裝中遇到了一些非常奇怪的錯誤。 有些時候,突然冒出Sitecore的拋出一個錯誤:Sitecore:看似隨機出現錯誤

Assert: Value Cannot be null. Parameter: Item. 

我來識別問題最近正在縮小下來到任何一個索引或網絡數據庫。

無論如何,如果我登錄到Sitecore的項目是隻是失蹤,我可以有3種方式解決這個問題:

  • 重建索引。
  • 回收應用程序池
  • iisreset

請問你們有一個想法,爲什麼這可能發生?我們正在運行Sitecore.NET 6.5.0(修訂版120706)。任何幫助將深表謝意。

+1

我曾經有一個類似的問題,同時打開了幾個瀏覽器標籤,並在其中使用了不同的Sitecore數據庫,例如:從Sitecore桌面打開頁面編輯器作爲新選項卡,然後將桌面切換到Core數據庫,然後再次嘗試在頁面編輯器中執行某些操作(無需將桌面切換回主數據庫)。 –

+0

這是否發生在網絡或主數據庫中,是由內容作者或最終用戶體驗的?另外,你有沒有關於什麼物品丟失的信息? –

+0

該索引始終存在一些陳舊性,因此當根據索引條目拉取Sitecore項目時,請確保該項目存在。我已經看到了這種情況發生,特別是刪除一個項目,併發布項目的父母或反之亦然的組合。 –

回答

4

您正在描述系統穩定性問題,因此我建議您打開一個Sitecore支持(http://support.sitecore.net)的票。由於我們無法訪問您的日誌和配置,因此這種問題難以通過堆棧溢出進行故障排除。

打開票證時,我建議使用Support Package Generator,它捆綁Sitecore支持需要解決問題所需的所有信息(Web.config,App_Config文件,IIS設置,Sitecore日誌文件)。這是一個非常漂亮的工具。

這就是說,從你所描述的情況來看,這聽起來像是這個問題與緩存有關。重新啓動IIS解決問題的事實表明該項目位於Web數據庫中,但運行時未看到它。您可以通過使用/sitecore/admin/cache.aspx屏幕清除緩存來證明這是否是問題。如果您的緩存未正確更新,則應根據SDN Scaling Guide中的準則查看您的配置。

+0

我現在已經打開了一個使用sitecore的支持票證,並且正在等待看看會發生什麼 –

+0

涼!讓我們知道這個問題到底是什麼。 –

+0

我也面臨類似的問題,網站不穩定。我們還使用Sitecore擴展環境,並且只使用IISreset/App池回收修復的問題。如果您有任何更新,請告訴我們。 –

2

基於知道您正在使用高級數據庫爬網程序,您的問題可能是您如何將SkinnyItem轉換爲Item。我之前有過這個問題。如果您查看SkinnyItem.cs class,則有一個GetItem()方法可將其轉換爲Item。您可以看到它使用數據庫通過其ID,語言和版本號來獲取項目。當您從主站發佈到網站時,您可能正在發佈現有項目的新版本#,因此新版本存在於Web數據庫中,但索引未更新並引用舊版本。所以,這個GetItem()調用將使用以前的版本#並且該項目將爲空。解決此問題的一種方法是,不要調用GetItem()方法,只需使用您自己的代碼從Sitecore獲取該項目的最新版本,例如

Item item = Sitecore.Context.Database.GetItem(someSkinnyItem.ItemID); 

而不是

Item item = someSkinnyItem.GetItem(); 

下面是一個例子流程:

    在主DB
  • 美孚項目創建爲版本1
  • 發佈美孚到網絡
  • 指數將挑選在Web數據庫中添加版本1並放入索引。
  • 任何針對索引的查詢代碼將通過GetItem()方法將SkinnyItem轉換爲Item,並將傳遞1作爲版本#。
  • 頁面將加載,日誌中沒有錯誤
  • 回到master,創建Foo的第2版併發布。
  • 索引可能無法立即更新或者即使配置錯誤。看起來對指數將調用GetItem(),仍然與第1版呼叫,因爲這是該指數
  • 但是當你發佈,網絡不再有第1版
  • 代碼,它現在有2版,因而該特定版本項目foo是空
  • 錯誤顯示在日誌

關於如何與索引更新同步HTML緩存清理類似的說明,here's a blog post by Alex Shyba(ADC的創建者)。這可能有幫助。

+0

+1真正有用的東西,Mark,謝謝!我想知道的一件事 - 爲什麼做一個IIS或應用程序池回收解決這個問題?索引不會過時嗎? –

+0

偉大的問題,它*可能*不是索引,這只是我的懷疑。在類的靜態成員中的代碼中是否有任何'Item'或'SkinnyItem'引用?如果是這樣,一個靜態成員會保留在所有頁面的內存中,並且不會逐頁處理,所以IIS重置/回收將從內存中清除 –

+0

哇。如果可以的話,我會給予第二次投票。 ;) –

相關問題