Sitecore的:看似随意出现错误(Sitecore: Seemingly Random erro

2019-10-17 09:42发布

我们正在经历在我们安装了一些非常奇怪的错误。 有些时候,突然冒出Sitecore的抛出一个错误:

Assert: Value Cannot be null. Parameter: Item. 

我是来找出问题最近正在缩小下来到任何一个索引或网络数据库。

无论如何,如果我登录到Sitecore的项目是只是失踪,我可以有3种方式解决这个问题:

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

请问你们有一个想法,为什么这可能发生? 我们正在运行Sitecore.NET 6.5.0(修订版120706)。 任何帮助将十分赞赏。

Answer 1:

您是描述系统的稳定性问题,所以我建议用Sitecore的支持(开罚单http://support.sitecore.net )。 这类问题是很难解决了堆栈溢出,因为我们没有访问您的日志和配置。

当打开票,我建议使用支持包生成器 。它包含了所有(Web.config文件,APP_CONFIG文件,IIS设置,Sitecore的日志文件)Sitecore的支持需要解决问题的信息。 这是一个非常漂亮的工具。

这就是说,从你的描述,这听起来像问题与缓存。 即重新启动IIS解决问题的事实表明,该项目是在Web数据库,但运行时不会看到它。 你可以证明了这是否是使用/sitecore/admin/cache.aspx屏幕清除缓存的问题。 如果缓存是没有得到正确更新,你应该检讨对SDN中的准则配置缩放指南 。



Answer 2:

基于了解您所使用的高级数据库抓取,您的问题可能是如何你是一个转换SkinnyItem一个Item 。 我以前也有这个问题。 如果你看一下SkinnyItem.cs类 ,有一个GetItem()方法将其转换成一个Item 。 你可以看到它使用的数据库通过其ID,语言和版本号来获取项目。 其可能的,当你从主发布到网络,您要发布现有项目的新版本#,因此新版本在Web DB存在,但指数不更新和引用旧版本。 所以,这GetItem()调用将使用以前的版本号和该项目将是空的。 解决这个问题的方法之一是,而不是调用一个GetItem()方法,只需使用自己的代码来从Sitecore的,如获得最新版本的该项目的

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

代替

Item item = someSkinnyItem.GetItem();

下面是一个例子流程:

  • 在主数据库创建为版本1美孚项目。
  • 发布富到网
  • 指数将回升版本1的Web DB和投入指数。
  • 针对索引中的任何查询的代码将所述转换SkinnyItem到一个Item经由GetItem()方法和将通过1作为版本#。
  • 页面将加载,在日志中没有错误
  • 回到主,创建富第2版和发布。
  • 指数可能不会马上更新,或者即使配置错误。
  • 看起来对指数代码调用GetItem()并与第1版仍然可以调用,因为这是该指数
  • 但是,当你发布,网络不再有第1版,它现在有2版,因此该项目的特定版本的foo为空
  • 错误显示日志

与此类似, 这里有一个博客文章由Alex Shyba (ADC的创造者)如何与索引更新同步HTML清除缓存。 这可能会有帮助。



文章来源: Sitecore: Seemingly Random errors appear