我正在开发一个SharePoint应用程序,该应用程序支持在单个操作中导入多个文档。 我还有一个ItemAdded事件处理程序,该处理程序对项目元数据执行一些基本维护。 导入的文档和手动创建的文档都会触发此事件。 难题的最后一部分是批处理操作功能,我实现了该功能以启动工作流并更新另一个元数据字段。

我可以通过提取SPListItem的文件数据来引起COMException 0x81020037。 该文件只是一个InfoPath表单/ XML文档。 我能够修改XML,并将其成功推回SPListItem。 当我此后立即关闭自定义功能并修改元数据时,有时会导致COM错误。

该错误消息基本上表明该文件已被另一个线程修改。 在自定义功能更改元数据时,ItemAdded事件似乎仍在将文件写回到数据库中。 我尝试放入延迟和错误捕获循环,以尝试检测到SPListItem可以安全修改且几乎没有成功。

有没有办法判断另一个线程在文档上是否有锁?

===============>>#1 票数:1

有时,我一次执行一次会看到ItemAddedItemUpdated触发两次。 您可以尝试在ItemAdded()方法中放置一个断点以确认这一点。

我的解决方案是单线程ItemAdded()方法:

private static object myLock = new object();
public override void ItemAdded(SPItemEventProperties properties) {
    if (System.Threading.Monitor.TryEnter(myLock, TimeSpan.FromSeconds(30))
    {
        //do your stuff here.
        System.Threading.Monitor.Exit(myLock);
    }
}

===============>>#2 票数:0

我必须调查一下,然后再回覆您。 我的问题似乎是,代码在不同的类,不同的功能中运行,并由不同的线程控制,所有这些线程都试图访问同一条记录。

我试图避免使用固定的延迟。 遇到任何线程问题,一个线程有可能会延迟或阻塞超出我们预期的范围。 通过在具有不同负载的不同服务器硬件上进行部署,这是非常现实的可能性。 在频谱的另一端,即使我延迟一点,我也不希望它过高,尤其是不要30秒。 我的客户将汇入成千上万份文件,而任何明显的延迟都会导致整天汇入。

  ask by Jason Z translate from so

未解决问题?本站智能推荐:

1回复

SharePointOnlineCredentials引发ComException

我正在在线使用SharePoint,并使用Windows Azure托管访问SPO的过程。 我们已经向Azure角色添加了启动任务,以安装http://www.microsoft.com/zh-cn/download/details.aspx?id=35585 。 我们的第一个问题是,由
1回复

那么,COM错误0x80070012是什么呢?

我们的客户在使用SharePoint网站时遇到了麻烦。 他们导航到任何页面时,看到以下错误(或类似信息)出现: 没有更多文件(0x80070012) 有人知道这个错误试图说什么吗? 我曾尝试使用Google进行搜索,但是找不到任何结论。 我假设由于这是一个COM错误,因此
1回复

SPItemEventReceiver中具有ListItem.Update()的错误代码-2130575305(0x81020037)

我是Sharepoint的新手,目前正在维护一个存在错误的既定解决方案。 不幸的是我无法解决问题。 当我尝试使用properties.ListItem.Update()方法时,在ItemAdded事件中收到带有ErrorCode 2130575305的SPException。 在更新项
1回复

发生类型为“ System.Runtime.InteropServices.COMException”的异常。 接口未注册(HRESULT的异常:0x80040155)

我正在尝试从其他线程使用COM对象,但出现此错误。 在单线程模型中不会发生相同的错误。 可能是什么原因? 我尝试使用CComMultiThreadModel实现接口。 仍然没有运气。
1回复

使用没有共享COM对象的COM STA或MTA?

该线程很好地解释了STA vs MTA for COM,但是它并没有解决如何为之编写代码或何时使用一个或另一个,而是仅讨论了有关线程安全对象是否使用COM单元的技术问题。 我愿意打赌大多数用户只是想知道如何通过COM使用Win API,而无需在多个线程之间共享任何COM对象。 如果您的C
2回复

System.Runtime.InteropServices.COMException(0x80080005)

我收到错误: System.Runtime.InteropServices.COMException(0x80080005):由于以下错误,检索具有CLSID {91493441-5A91-11CF-8700-00AA0060263B}的组件的COM类工厂失败:80080005。
7回复

System.Runtime.InteropServices.COMException(0x800A03EC)

Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs()方法在Windows Server 2003上运行良好,也在XP上运行,但在Windows服务器2008上没有。我复制了它,因为它给了所有的Dll和权限 我还尝试了网上提供的所有解决方
1回复

ComImport接口中的重新排序方法抛出COMException(0x80041001)

考虑以下用于COM互操作和互联网快捷方式的代码: 以下按预期工作: 然而: 如果我注释掉IUniformResourceLocatorW.SetUrl (我没有使用), IUniformResourceLocatorW.GetUrl会抛出一个COMException (
1回复

WMEncoder引发COMException(0x80004005)未指定的错误

所以我正在运行这段代码 我在执行encoder.PrepareToEncode时收到COMException(0x80004005)。 一些注意事项: 1)该过程由ASP.NET Web服务生成,因此它作为NETWORK SERVICE运行。2)inFile和outFile是
1回复

对远程计算机的调用命令导致COMException(0x80040154)

我有一个使用COM的C#.NET应用程序。 当我在本地调用应用程序(machine1)时,将按需创建COM对象。 当我使用另一台计算机(machine2)远程启动应用程序时 应用程序启动(当然是在machine1上),但是无法绑定COM对象: 我不明白这是怎么可能的-