0

私は数週間、Sharepoint2010 の C# でクライアント側オブジェクト モデルを使用しており、File.SaveBinaryDirect を使用してファイルをアップロードし、ファイルをリストに追加してから ExecuteQuery を呼び出すことを試みました。サイズが 3 MB 以下のファイルをいくつかアップロードするだけで、どちらの方法も成功します。

ただし、SaveBinaryDirect を使用してそれぞれ 10 KB のファイルを 10,000 個アップロードしようとすると、SocketException (Address already in use) で失敗します。この例外をスローする前に 2000 回ほど呼び出されるため、Time_wait がデフォルトの 240 秒の待機を終了する前に、すべてのポートを使い果たしているように見えます。

ExecuteQuery メソッドを使用すると機能しますが、それは、1 つのバッチのサイズが常に 3 MB 未満で、一度に 20 個を超えるファイルをアップロードしないバッチでアップロードするためです。したがって、この方法にも制限があります。3 MB を超えるファイルをアップロードできず、SocketException をスローするリスクもあります。10,000 ファイルの場合、メソッドは 500 回しか呼び出されません。アップロードするファイルの量が多いと、このメソッドも 2000 回以上呼び出され、SaveBinaryDirect メソッドと同じエラーがスローされると思います。

現在、CSOM で SocketException エラーを解決する方法がわかりません。誰もそれを解決する方法を知っていますか?

私ができることは try-catch であり、この特定の例外をキャッチするたびに、ファイルを再度アップロードする前に 4 分間待ちます。オプション REUSE_ADDRESS を使用してソケット付きの Web クライアントを実装することもできますが、時間を無駄にするかどうかはわかりません。また、私はこの問題の専門家ではありません。

また

さまざまなサイズの任意の数のファイルをアップロードする信頼できる方法を知っている人はいますか (ただし、常にデフォルトの最大アップロード サイズの 50 MB 未満である必要があります)。または、Sharepoint2010 のどの API がこの可能性を提供してくれるでしょうか? 始めることさえ可能ですか?

おそらくサービス WebCopy.asmx および/または WCF サービス listdata.svc を試してみますが、これらのサービスのいずれかで成功するかどうかはわかりません。これらは、CSOM を介した Client.svc の使用法と非常によく似ています。

4

1 に答える 1

1

したがって、この方法は完全に安全ではないように見えますが、HttpWebRequest が同じ接続を再利用し続けようとする方法は次のとおりです。

        HttpWebRequest request = (HttpWebRequest)WebRequest.CreateRequest(url);
        request.ConnectionGroupName = CONN_GROUP_NAME;
        request.UnsafeAuthenticatedConnectionSharing = true;

ConnectionGroupName の設定はオプションです。詳細については、こちらをご覧ください。

CSOM で WebRequest にアクセスできます。場所は次のとおりです。

        ClientContent ctx = new ClientContext(siteUrl);
        ctx.PendingRequest.RequestExecutor.WebRequest.UnsafeAuth...

最初に PendingRequest があることを確認してください。

これが役立つことを願っています。

于 2013-06-18T19:00:49.740 に答える