Я считаю, что проблема с потоковым методом заключается в том, что клиент хранилища не знает, сколько времени проходит поток, прежде чем он начнет отправлять данные. Вероятно, это приводит к тому, что длина содержимого не обновляется, и в конце файла появляются отсутствующие данные.
Работа с содержимым блоба в текстовом формате поможет. Вы можете загрузить содержимое BLOB-объекта в виде текста, а затем загрузить его в виде текста. Делая это, вы сможете избежать как удаления (сэкономив вам 1/3 транзакций), так и иметь более простой код.
var blob = container.GetBlobReference("file.xml");
var xml = blob.DownloadText(); // transaction 1
var xDoc= XDocument.Parse(xml);
// Do some updates/inserts using LINQ to XML.
blob.UploadText(xDoc.ToString()); // transaction 2
Кроме того, если вы можете воссоздать файл, не загружая его в первую очередь (мы можем сделать это иногда), то вы можете просто загрузить его и перезаписать старый, используя одну транзакцию хранения.
var blob = container.GetBlobReference("file.xml");
var xDoc= new XDocument(/* generate file */);
blob.UploadText(xDoc.ToString()); // transaction 1