我们正在经历在我们安装了一些非常奇怪的错误。 有些时候,突然冒出Sitecore的抛出一个错误:
Assert: Value Cannot be null. Parameter: Item.
我是来找出问题最近正在缩小下来到任何一个索引或网络数据库。
无论如何,如果我登录到Sitecore的项目是只是失踪,我可以有3种方式解决这个问题:
请问你们有一个想法,为什么这可能发生? 我们正在运行Sitecore.NET 6.5.0(修订版120706)。 任何帮助将十分赞赏。
您是描述系统的稳定性问题,所以我建议用Sitecore的支持(开罚单http://support.sitecore.net )。 这类问题是很难解决了堆栈溢出,因为我们没有访问您的日志和配置。
当打开票,我建议使用支持包生成器 。它包含了所有(Web.config文件,APP_CONFIG文件,IIS设置,Sitecore的日志文件)Sitecore的支持需要解决问题的信息。 这是一个非常漂亮的工具。
这就是说,从你的描述,这听起来像问题与缓存。 即重新启动IIS解决问题的事实表明,该项目是在Web数据库,但运行时不会看到它。 你可以证明了这是否是使用/sitecore/admin/cache.aspx屏幕清除缓存的问题。 如果缓存是没有得到正确更新,你应该检讨对SDN中的准则配置缩放指南 。
基于了解您所使用的高级数据库抓取,您的问题可能是如何你是一个转换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清除缓存。 这可能会有帮助。