1

我收到来自 Sharepoint 客户端托管对象模型的超时。

Microsoft.SharePoint.Client.ServerException: The operation has timed out.

基本上,我正在批量处理 100 个更新并一次性发送它们。如果需要时间对我来说没问题,但我真的想避免超时异常。

我已经尝试过一百万种方法来增加客户端上下文中的超时时间,但都没有成功。在调用客户端上下文的 executequery 方法时,我使用反射来尝试识别共享点正在做什么。sharepoint 基本上是创建一个 HttpWebRequest 并发送它。

我以下面的代码结束,但仍然没有成功:

 public static void SetInfinteTimeout(this ClientContext ctx)
{
    int timeout = 10 * 60 * 1000;
    ctx.RequestTimeout = timeout;
    ctx.PendingRequest.RequestExecutor.RequestKeepAlive = false;            
    ctx.PendingRequest.RequestExecutor.WebRequest.KeepAlive = false;
    ctx.PendingRequest.RequestExecutor.WebRequest.Timeout = timeout;
    ctx.PendingRequest.RequestExecutor.WebRequest.ReadWriteTimeout = timeout;            
    System.Net.ServicePointManager.DefaultConnectionLimit = 200;
    System.Net.ServicePointManager.MaxServicePointIdleTime = 2000;
    System.Net.ServicePointManager.MaxServicePoints = 1000;
    System.Net.ServicePointManager.SetTcpKeepAlive(false, 0, 0); 
    ServicePointManager.DnsRefreshTimeout = timeout; // 10 minutes       

}

但我仍然收到超时错误!
请问还有什么我想念的吗?


任何帮助将不胜感激。

4

2 回答 2

1

你有没有尝试过

  • 保持默认 KeepAlive (true),
  • 禁用超时和
  • 保持默认 MaxServicePointIdleTime 值(默认为 100 秒,但您设置为 2)。

就像:

public static void SetInfiniteTimeout(this ClientContext ctx)
{
    ctx.RequestTimeout = -1;  //ctx.RequestTimeout or System.Threading.Timeout.Infinite;
}

另外,在您当前的配置中,您需要多少秒才能获得超时错误?

于 2012-08-01T22:39:09.287 回答
0

解决方案是使用 clientcallablesettings (SPWebApplication.ClientCallableSettings): http:
//msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebapplication.clientcallablesettings.aspx
这有一个执行超时属性和其他相关设置。

就我而言,我需要根据以下代码在升级操作中添加它

using (SPSite site = new SPSite(siteURL))
using (SPWeb web = site.OpenWeb())
{
      site.WebApplication.ClientCallableSettings.ExecutionTimeout = TimeSpan.FromMinutes(60);
      site.WebApplication.ClientCallableSettings.MaxObjectPaths = 1000;
      site.WebApplication.ClientCallableSettings.MaxResourcesPerRequest = 1000;
      site.WebApplication.ClientCallableSettings.EnableStackTrace = true;
      site.WebApplication.Update();
}
于 2012-08-11T05:29:58.757 回答