2012-11-19 51 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

哇。如果可以的话,我会给予第二次投票。 ;) –

相关问题