2014-02-13 69 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小時),則需要使用其他方式,例如計時器作業。