私は数週間、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 の使用法と非常によく似ています。