2014-02-13 44 views
2

目前,我遇到了SharePoint 2013中的SPLongOperation问题。我有一些自定义逻辑至少需要15分钟才能处理,因此我使用SPLongOperation来确保它不会在6分钟。过去,这段代码在SharePoint 2010上工作。问题在于代码执行在6分钟后完全停止。通过附加调试器,它不会超时,所以不知怎的,SPLongOperation块会被忽略或不能正常工作。我用它来调用SPLongOperation的代码如下:SharePoint 2013:SPLongOperation超时

using (SPLongOperation operation = new SPLongOperation(Page)) 
{ 
    try 
    { 
     operation.LeadingHTML = html; //adding some custom html... 
     operation.Begin(); 

     // Business Logic 
    } 
    finally 
    { 
     operation.End("/page.aspx", SPRedirectFlags.RelativeToLayoutsPage, Context, string.Empty); 
    } 
} 

我在几台机器使用这段代码中看到的行为是6分钟后,在ULS以下异常出现超时: 的System.Web .HttpException:请求超时。有没有人有一个想法可能是什么问题?我正在使用安装了10月CU的SharePoint 2013。我还使用while(true)语句测试了此块,以确保业务逻辑不会导致问题。

+0

检查你的web应用程序的Web .config文件。默认情况下,对于80端口上的Web应用程序,它位于C:\ inetpub \ wwwroot \ wss \ VirtualDirectories \ 80文件夹中。 system.web/httpRuntime标记的executionTimeout属性的值是什么? –

+0

该属性当前未在web.config中显式设置。通常我会期望SPLongOperation覆盖web.config超时设置。 –

+0

我不确定它是否像你说的那样工作。但是你在某种程度上认为这个页面覆盖了这个设置 - 检查C:\ Program Files \ Common Files \ Microsoft Shared \ Web Server Extensions \ 14 \ TEMPLATE \ LAYOUTS文件夹中的web.config。它的executionTimeout设置为360秒(6分钟)。尝试增加它。另外不要忘记,在更改web.config文件后需要执行iisreset。 –

回答

2

也有这个问题,发现这种方法,定义的超时的页面,创建SPLongOp对象之前:

Page.Server.ScriptTimeout = 3600; // specify the timeout to 3600 seconds 
using (SPLongOperation operation = new SPLongOperation (this .page)) 
{ 
} 

来源:http://shaharpan.wordpress.com/2014/11/20/splongoperation-thread-was-being-aborted-error-in-sharepoint-2013/

托马斯

+0

伟大的提示!在我们的案例中,我们做了一个解决方法。现在我们在客户端实用程序中使用CSOM导入数据。这也适用,但是直接在服务器上导入数据要慢很多。 –

0

SPLongOperation在执行时保持客户端和服务器之间的连接处于打开状态。其目的是通知用户一切正常,但需要一点时间(2-3分钟)才能完成任何要完成的任务。

因此,如果您需要运行一个非常长的程序(例如,持续1小时),则需要使用其他方式,例如计时器作业。