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 に答える