Ich wusste, dass der Azure CloudAppendBlob vor Nebenläufigkeitsproblemen sicher war, da Sie nur an diesen Blobspeicher anhängen können und E-Tags nicht vergleichen müssen. Wie von diesem Beitrag erwähnt:Azure CloudAppendBlob-Fehler bei gleichzeitigem Zugriff
speziell:
Darüber hinaus unterstützt Anhängungs auf den gleichen Blobs mehrere Clients mit, ohne dass für die Synchronisation (im Gegensatz zu Block und Seiten-Blob) Schreiben
jedoch die folgende Einheit Test aufwirft:
412 Die angegebene Bedingung für die Append-Position wurde nicht erfüllt.
Stack-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
Hier ist das Gerät zu testen. Vielleicht wird der Dienst Anfragen aus verschiedenen Kontexten behandeln, aber nicht so wie eine Parallele?
[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"));
}
Methode in 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);
}
Vielleicht bin ich etwas fehlt. Der Grund, warum ich versuche, dies zu tun, da ich mehrere Web-Jobs habe, die alle in diesen Append-Blob schreiben können, und ich dachte, das war, wofür er entwickelt wurde?
Ich habe auch gerade dies von mehreren Webjobs spinnen und etwas Text in den gleichen appendblob schreiben. Ich bekomme den gleichen Fehler. – James
Beachten Sie, dass ich Version 5.0.2.0 von Microsoft.WindowsAzure.Storage (Ich habe auch versucht, gegen 5.0.3.0 Vorschau) – James