Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理错误的最佳方法:文件';文件名';已被SHAREPOINT\system修改_C#_Sharepoint 2010 - Fatal编程技术网

C# 处理错误的最佳方法:文件';文件名';已被SHAREPOINT\system修改

C# 处理错误的最佳方法:文件';文件名';已被SHAREPOINT\system修改,c#,sharepoint-2010,C#,Sharepoint 2010,在sharepoint项目中,我有非常重要的事件接收器,直到现在,该项目的7个版本已经为客户端部署。奇怪的是,其中一个版本如此不稳定和缓慢。我的意思是,有时在更新项目时,它会粘住。这是随机发生的 注意:他们的网络速度很好。问题肯定出在项目中 我检查了代码并找到了处理错误的方法SHAREPOINT\system修改了文件“FileName”有时会导致循环。这是ItemUpdated和ItemAdded要更新的事件接收器中的代码splitItem: base.EventFiringEnabled =

在sharepoint项目中,我有非常重要的事件接收器,直到现在,该项目的7个版本已经为客户端部署。奇怪的是,其中一个版本如此不稳定和缓慢。我的意思是,有时在更新项目时,它会粘住。这是随机发生的

注意:他们的网络速度很好。问题肯定出在项目中

我检查了代码并找到了处理错误的方法SHAREPOINT\system修改了文件“FileName”有时会导致循环。这是
ItemUpdated
ItemAdded
要更新的事件接收器中的代码
splitItem

base.EventFiringEnabled = false;
bool tryAgain = false; //used to handle "The file has been modified by SHAREPOINT\system"
do
{
    tryAgain = false;
    try
    {
        try
        {
            if (_item.File.CheckOutType == SPFile.SPCheckOutType.Online || _item.File.CheckOutType == SPFile.SPCheckOutType.Offline)
                 {
                     try
                     {
                          _item.File.CheckIn("prevent checkout/locked error");
                     }
                     catch (Exception ex) { }
                 }
           _item.SystemUpdate(true);
        }
        catch (Exception ex)
        {
             throw ex;  //-- used to handle "The file has been modified by SHAREPOINT\system"
        }
    }
    catch (Exception ex) //-- used to handle "The file has been modified by SHAREPOINT\system"
    {
        if (ex.Message.ToLower().Contains("has been modified by"))
        {
            System.Threading.Thread.Sleep(1000 * 2);
            tryAgain = true;
        }
        else
        {
            this.HandleException(ex, "");
        }
     }
} while (tryAgain == true);
此while循环具有以下状态:

1-项目是第一次更新,没有例外

2-更新引起了提到的异常,它将在几次迭代后更新

3-更新原因提到了异常,它停留在一个循环中,即使在200次迭代后也不会更新


此问题可能导致项目不稳定,有时运行速度很慢。处理此情况的最佳方法是什么?

快速搜索中出现了几篇文章,其中提到将elements.xml中的事件接收器定义更改为同步执行,而不是异步执行(默认情况下):


同步的

这篇文章我摘自:

可能已经太晚了。。2017年我也面临同样的问题。。这些解决方案对我不起作用。。我所做的是,在ItemAdded事件接收器上,我正在读取该文件,读取后,我创建了一个新线程,以根据该文件中的值更新列。它起作用了

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="850">
      <Receiver>       
        <Synchronization>Synchronous</Synchronization>
      </Receiver>     
  </Receivers>
</Elements>