Ma compréhension était que le CloudAppendBlob Azure était à l'abri des problèmes de simultanéité, car vous ne pouvez que l'ajouter à ce stockage BLOB et il n'a pas besoin de comparer les E-tags. Comme indiqué par ce poste:Azure Erreurs CloudAppendBlob avec accès simultané
spécifiquement:
En outre, Append Blob soutient avoir plusieurs clients d'écriture à la même blob sans besoin de synchronisation (contrairement à bloc et blob page)
Cependant, le test unitaire suivant pose:
412 la condition de position d'ajout spécifiée n'a pas été remplie.
pile trace
Microsoft.WindowsAzure.Storage.Blob.BlobWriteStream.Flush()
Microsoft.WindowsAzure.Storage.Blob.BlobWriteStream.Commit()
Microsoft.WindowsAzure.Storage.Blob.CloudAppendBlob.UploadFromStreamHelper
Microsoft.WindowsAzure.Storage.Blob.CloudAppendBlob.AppendFromStream
Microsoft.WindowsAzure.Storage.Blob.CloudAppendBlob.AppendFromByteArray
Microsoft.WindowsAzure.Storage.Blob.CloudAppendBlob.AppendText
Voici le test unitaire. Peut-être que le service va gérer les demandes de différents contextes mais pas comme ça en parallèle?
[TestMethod]
public void test_append_text_concurrency()
{
AppendBlobStorage abs = new AppendBlobStorage(new TestConnectConfig(), "testappendblob");
string filename = "test-concurrent-blob";
abs.Delete(filename);
Parallel.Invoke(
() => { abs.AppendText(filename, "message1\r\n"); },
() => { abs.AppendText(filename, "message2\r\n"); }
);
string text = abs.ReadText(filename);
Assert.IsTrue(text.Contains("message1"));
Assert.IsTrue(text.Contains("message2"));
}
Méthode AppendBlobStorage
public void AppendText(string filename, string text)
{
CloudAppendBlob cab = m_BlobStorage.BlobContainer.GetAppendBlobReference(filename);
// Create if it doesn't exist
if (!cab.Exists())
{
try
{
cab.CreateOrReplace(AccessCondition.GenerateIfNotExistsCondition(), null, null);
}
catch { }
}
// Append the text
cab.AppendText(text);
}
Peut-être que je manque quelque chose. La raison pour laquelle j'essaye de faire ceci comme j'ai plusieurs travaux de Web qui peuvent tous écrire à cet append blob et j'ai pensé que c'était pour cela que c'était conçu?
Je viens aussi de tester cela en tournant plusieurs webjobs et en écrivant du texte sur le même appendix. J'ai la même erreur. – James
Notez que j'utilise la version 5.0.2.0 de Microsoft.WindowsAzure.Storage (j'ai également essayé contre l'aperçu de 5.0.3.0) – James