Как добавить в учетную запись хранения Azure (Gen2) AppendBlob без конфликта (409)

У меня есть метод, который принимает каталог больших двоичных объектов и поток текста в памяти, который необходимо читать построчно и добавлять в Azure AppendBlob. Моя учетная запись хранения - это универсальная версия 2 (стандартный / горячий уровень) с включенным Data Lake Gen 2. В настоящее время я не могу добавлять к BLOB-объектам из-за ошибки 409 Conflict, хотя другие пользователи не пишут в этот контейнер.

Ниже приведена сокращенная (для простоты) версия моего кода с той же проблемой: Обратите внимание, что код написан для .net 4.6:

/* the following libraries are in use
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
*/

static void WriteCSV(
    Stream csvStream, 
    CloudBlobContainer tgtContaine // this is a Gen 2 container
    )
{
    csvStream.Position = 0;
    using (StreamReader sr = new StreamReader(csvStream))
    {
        string csvFileName = "test-append-blob" + $@"_{DateTime.Now.ToString("yyyy-MM-ddTHHmmss")}.csv";
        
        CloudAppendBlob blobCSVFile = tgtContaine.GetAppendBlobReference("iso/dwh/" + csvFileName); // need to create this in this directory
        
        if (!blobCSVFile.Exists()) blobCSVFile.CreateOrReplace(); // at this point I can see the empty file being created

        while (sr.Peek() >= 0)
        {
            string csvLine = sr.ReadLine();
            
            // some additional logic ommited for brevity

            blobCSVFile.AppendText(csvLine); // 409 conflict occures here !!!
        }
    }
}

Есть несколько причин, по которым я использую добавление большого двоичного объекта и пишу построчно, одна из которых - потенциальная возможность для большого содержимого потока и связанных с этим проблем с памятью.

Не могли бы вы подсказать мне, как правильно это сделать? и почему здесь может возникнуть конфликт 409, если никакие другие процессоры или сеансы не используют этот контейнер / каталог?

Пожалуйста, дайте мне знать, если мне понадобится дополнительная информация.

заранее спасибо


person rarpal    schedule 05.10.2020    source источник
comment
Какое сообщение вы получаете с кодом 409? docs.microsoft.com/en-us/ отдых / api / storageservices /   -  person krishg    schedule 06.10.2020
comment
Microsoft.WindowsAzure.Storage.StorageException: удаленный сервер возвратил ошибку: (409) Конфликт. --- ›System.Net.WebException: удаленный сервер вернул ошибку: (409) Конфликт. \ R \ n в Microsoft.WindowsAzure.Storage.Shared.Protocol.HttpResponseParsers.ProcessExpectedStatusCodeNoException [T] (HttpStatusCode expectedStatusCode, HttpStatusCode, HttpStatusCode, HttpStatus T retVal, StorageCommandBase1 cmd,Exception ex)\r\n at Microsoft.WindowsAzure.Storage.Blob.CloudAppendBlob.<AppendBlockImpl>b__76(RESTCommand1 cmd, HttpWebResponse, соответственно, Exception ex, OperationContext ctx) \ r \ n   -  person rarpal    schedule 06.10.2020
comment
Какая у вас версия nuget для blob SDK?   -  person krishg    schedule 06.10.2020
comment
Azure.Storage.Blobs (12.2.0)   -  person rarpal    schedule 06.10.2020
comment
Похоже, ваш код не использует Azure.Storage.Blobs aka Версия 12 SDK. Я думаю, вы используете V11 SDK < / а>   -  person krishg    schedule 06.10.2020
comment
krishg Я думаю, что вы правы, хотя у меня есть пакет nuget, я использую Microsoft.WindowsAzure.Storage.Blob. Это связано с моей зависимостью от .net 4.6. Так может быть, AppendBlobs не будет работать с устаревшим SDK?   -  person rarpal    schedule 06.10.2020
comment
какую версию Microsoft.WindowsAzure.Storage.Blob вы используете?   -  person krishg    schedule 06.10.2020
comment
Это ссылка на сборку Assembly Microsoft.WindowsAzure.Storage, Version = 7.2.1.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35   -  person rarpal    schedule 06.10.2020
comment
Ой, это очень давно! Я подозреваю, что он использует гораздо более старую версию API. 409 также может возникнуть из-за того, что для операции AppendBlob требуется как минимум версия 2015-02-21 (версия API) ... попробуйте обновить WindowsAzure.Storage nuget до последней версии.   -  person krishg    schedule 07.10.2020
comment
Удачи после обновления?   -  person krishg    schedule 07.10.2020
comment
Согласно странице nuget, версия 7.2.1 последний раз обновлялась 19 сентября 2016 г. Последняя версия - 9.3.3 (17.11.2018). Похоже, что даже последняя версия устарела, так как рекомендуется перейти на Azure.Storage.Blobs. К сожалению, это похоже на Azure.Storage.Blobs как зависимость от .Net Core или Standard, на которую в настоящее время я не могу перейти из-за некоторых сторонних библиотек, зависящих от .Net Fx, которые мне нужно использовать, или из-за бизнес-требований. На данный момент я использую UploadFromStream, что не идеально.   -  person rarpal    schedule 15.10.2020
comment
Azure.Storage.Blobs совместим с .NET Framework 4.6.1+, поскольку он соответствует стандарту .net 2.0.   -  person krishg    schedule 15.10.2020
comment
Я установил nuget Azure.Storage.Blobs, но когда я указываю using Microsoft.Azure.Storage.Blobs, он говорит, что тип или пространство имен Storage не существует в пространстве имен Microsoft.Azure.   -  person rarpal    schedule 15.10.2020