Модель клиента Sharepoint — время ожидания запроса

Я получаю тайм-аут от управляемой объектной модели клиента 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       

}

Но я все еще получаю сообщение об ошибке тайм-аута!
Есть ли что-то еще, что я упустил, пожалуйста?


Любая помощь будет принята с благодарностью.


person Joseph Caruana    schedule 31.07.2012    source источник


Ответы (2)


Ты пытался

  • сохранение KeepAlive по умолчанию (true),
  • отключение тайм-аута и
  • сохраняя значение MaxServicePointIdleTime по умолчанию (которое по умолчанию составляет 100 секунд, но вы установили значение 2).

Как только:

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

Кроме того, сколько секунд требуется для получения ошибки тайм-аута в вашей текущей конфигурации?

person Community    schedule 01.08.2012
comment
Привет - спасибо за ваш добрый ответ. Да, я перепробовал все настройки тайм-аута. Время истекло через 1,5 минуты. В конце концов, проблема была решена с помощью клиентских вызываемых настроек. Еще раз спасибо. +1 за ввод. - person Joseph Caruana; 11.08.2012

Решение заключалось в использовании clientcallablesettings (SPWebApplication.ClientCallableSettings):
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebapplication.clientcallablesettings.aspx
Имеет свойство времени ожидания выполнения и другие связанные настройки. .

person Joseph Caruana    schedule 11.08.2012
comment
Хорошо, но как получить SPWebApplication? - person Vroomfundel; 30.09.2013
comment
Лучшим решением является использование объектной модели сервера вместо объектной модели клиента. С объектной моделью сервера вы не столкнетесь с этими проблемами и вам не нужно будет настраивать/изменять настройки SP, и вы избежите головной боли. - person Zakos; 06.05.2015
comment
@JosephCaruana Можете ли вы опубликовать свое решение, что именно вы сделали с настройками ClientCallable? Ссылка, которая у вас есть в ответе, просто содержит объявление свойства - person Katana; 13.09.2018