【问题标题】:SharePoint COMExceptionSharePoint COMException
【发布时间】:2009-07-28 06:43:08
【问题描述】:

在 SharePoint 页面库中添加或编辑页面时,我们会遇到以下异常:

[COMException (0x81020016): 项目不存在 您选择的页面包含不存在的项目。它可能有 已被其他用户删除。点击页面顶部的“首页”返回 到您的网站。] 在 Microsoft.SharePoint.Library.SPrequestInternalClass.RenderColumn。

奇怪的是,当我们第一次执行“签入”然后单击“发布”按钮时,它运行良好。但是直接单击“发布”会产生错误,但并非总是如此!

页面库有发布和项目计划,没有工作流(添加/编辑页面的人也是审批者)和主要/次要版本。 我们使用从发布页面和自定义 PageLayout 派生的内容类型。

【问题讨论】:

  • 这是自定义页面库(按列表定义)还是标准 MOSS 提供的页面库?
  • 在我的问题中添加了有关以编程方式创建转储文件的信息。想想我现在没有主意了:)

标签: sharepoint workflow publishing comexception


【解决方案1】:

我确定您已经检查过了,但 ULS 日志中还有更多信息吗?

您是否尝试过将调试器设置为中断所有异常,这是否为您提供了更多信息?转到调试、异常并勾选公共语言运行时异常。然后转到工具、选项、调试并取消勾选启用我的代码。最后附加到 w3wp.exe。

如果您运行的是 Windows Server 2008,您也可以在上面的调试器中断时尝试taking a dump file。如果您正在运行 Server 2003,ADPlus 可能会有所帮助,但我没有这方面的经验。然后您应该可以使用DumpChk or WinDbg 打开转储文件。

编辑: 正如 cmets 中所讨论的,这是部署到生产环境中的代码,其服务不会中断。创建转储文件的唯一方法是编程。看看at this question 我问过,如果您需要走这条路,希望对您有所帮助。

如果您不想在调试过程中遇到麻烦,可以尝试的其他方法是尝试将自定义位部署到干净的服务器上。看看您是否仍然可以重现问题或问题是否发生了变化。

【讨论】:

  • 问题是,当使用开箱即用的发布工作流加上我们自己的 ItemEventReceiver(它根据列设置项目的权限)时会发生这种情况。而且它只发生在生产服务器上。
  • 嗯,这很难。是否有机会安排停机时间并使用 Visual Studio 远程调试器来捕获异常并获取转储?
  • 简而言之:不。客户端不希望服务器在生产时间停机,永远。我认为问题在于打破权限所需的代码是以提升的权限运行的。不知何故,SharePoint 认为该项目不再存在,因为另一个用户(提升的)基本上已签出该文件。
  • 听起来是这样的。我唯一可以建议的另一件事是专注于尝试在开发或测试中进行复制。可能是由于生产的特定拓扑(例如负载平衡问题)。解决时请给出答案!
  • 为这项努力添加了一个赞,谢谢。将继续尝试这个。看来我可能会得到一个完整的生产环境副本来玩。
【解决方案2】:

我假设您正在使用 2 个 Web 服务器的负载平衡。

它不会发生的事实总是表明服务器之间存在差异。

然后您可以检查几件事:

  • 是否所有版本和服务包在两台机器上都相同
  • 是否有任何服务器安装了测试版软件
  • 您的代码在两台服务器上是否相同

您可以在不关闭系统的情况下进行测试:从集群中删除第一个 Web 服务器,看看是否发生错误,然后将其重新添加,并对第二个 Web 服务器执行相同的操作。

【讨论】:

  • 这是一个单一的服务器设置(小站点)
  • 检查数据库的大小和碎片。可能是添加项目会触发数据库中的某些自动增长或重组。这可以解释为什么有时无法及时获得数据。未找到可能是超时。
猜你喜欢
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 2011-01-25
  • 2012-07-02
  • 1970-01-01
相关资源
最近更新 更多