2013-08-11 3 views
7

が、私はこのエラーを得た:Azureのテーブル記憶エラー:「操作のための予期しない応答コード:99」私は次のコードを実行したとき

var insert = new TableBatchOperation(); 
foreach (var entity in entities) 
{ 
    insert.Insert(entity); 
} 
cloudTable.ExecuteBatch(insert); 

エンティティのコレクションは512個の要素を含んでいました。 StorageExceptionて AzureのSDK:

"Unexpected response code for operation : 99" 

このエラーは何を意味し、そしてどのように私はこの問題を解決することができますか?

答えて

16

この説明不能なエラーは、Azureの一括処理(少なくともこの場合)が最大で100個の要素を受け取ることを意味します。あなたのバッチを制限して、あなたは良いでしょう。チャンク拡張メソッドは、このanswerからコピーされた

public void Insert(IEnumerable<T> entities) 
{ 
    foreach (var chunk in entities.Chunk(100)) 
    { 
     InsertMaxLimitElements(chunk); 
    } 
} 

private void InsertMaxLimitElements(IEnumerable<T> chunk) 
{ 
    var insert = new TableBatchOperation(); 

    foreach (var entity in chunk) 
    { 
     insert.Insert(entity); 
    } 
    cloudTable.ExecuteBatch(insert); 
} 

私はこのようなものを使用して終了

public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source, int chunksize) 
{ 
    while (source.Any()) 
    { 
     yield return source.Take(chunksize); 
     source = source.Skip(chunksize); 
    } 
} 
+2

私はここに含めたいいくつか他のもの - 1)すべてのエンティティトランザクション内のPartitionKeyが同じである必要があります。2)トランザクション内のエンティティは一度しか表示されません。3)エンティティの最大サイズは1 MBでもかまいませんが、バッチの最大サイズは4 MBです。これに関する詳細は、次のサイトを参照してください。http://msdn.microsoft.com/en-us/library/windowsazure/dd894038.aspx –

関連する問題