2013-08-11 11 views
7

ho ottenuto questo errore quando ho eseguito il seguente codice:Azure errore di memorizzazione delle tabelle: "codice di risposta imprevisto per il funzionamento: 99"

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

Dove la collezione entità conteneva 512 elementi. L'Azure SDK attraverso uno StorageException:

"Unexpected response code for operation : 99" 

Che cosa significa questo errore e come posso risolvere questo problema?

risposta

16

Questo errore non descrittivo indica che le operazioni in blocco di Azure (almeno in questo caso) richiedono fino a 100 elementi. Limita il tuo lotto e sarai bravo.

ho finito per usare qualcosa di simile:

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); 
} 

Il metodo di estensione Chunk è stato copiato da questo answer:

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

A poche altre cose che vorrei inserire qui - 1) Tutte le entità in una transazione deve avere lo stesso PartitionKey 2) Un'entità in una transazione può apparire solo una volta 3) Anche se la dimensione massima di un'entità può essere 1 MB, la dimensione massima di un batch può essere 4 MB. Ulteriori informazioni a riguardo possono essere trovate qui: http://msdn.microsoft.com/en-us/library/windowsazure/dd894038.aspx –

Problemi correlati