Большие двоичные объекты Azure: получение списка блокировок на C#

#c# #azure #azure-blob-storage

#c# #azure #azure-blob-хранилище

Вопрос:

Я работаю с большими двоичными объектами в хранилище Azure. Мне нужно получить незафиксированные блоки, насколько я выяснил, мне нужно вызвать «Получить список блокировок». Вот в чем проблема.

Существует ли функция «Получить список блокировок» в C # (Microsoft.WindowsAzure.StorageClient.dll )?

В MSDN говорится только о выполнении HTTP-запроса, ни слова об API StorageClient.

Если эта функция не существует в C #, есть ли какие-либо планы по включению ее в C # API?

Ответ №1:

Я думаю, что то, что вы ищете, — это метод DownloadBlockList в CloudBlockBlob http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.cloudblockblob.downloadblocklist.aspx

Там есть пример кода в MSDN — http://msdn.microsoft.com/en-us/library/ee772860.aspx

 static void DownloadBlockListForBlob(Uri blobEndpoint, string accountName, string accountKey)
{
    //Create service client for credentialed access to the Blob service, using development storage.
    CloudBlobClient blobClient = new CloudBlobClient(blobEndpoint, new StorageCredentialsAccountAndKey(accountName, accountKey)); 

    //Get a reference to a block blob.
    CloudBlockBlob blockBlob = blobClient.GetBlockBlobReference("mycontainer/mybinaryblob.mp3");

    //Download the committed blocks in the block list.
    foreach (var blockListItem in blockBlob.DownloadBlockList())
    {
        Console.WriteLine("Block ID: "   blockListItem.Name);
        Console.WriteLine("Block size: "   blockListItem.Size);
        Console.WriteLine("Is block committed?: "   blockListItem.Committed);
        Console.WriteLine();
    }

    //Download only uncommitted blocks.
    foreach (var blockListItem in blockBlob.DownloadBlockList(BlockListingFilter.Uncommitted))
    {
        Console.WriteLine("Block ID: "   blockListItem.Name);
        Console.WriteLine("Block size: "   blockListItem.Size);
        Console.WriteLine("Is block committed?: "   blockListItem.Committed);
        Console.WriteLine();
    }

    //Download all blocks.
    foreach (var blockListItem in blockBlob.DownloadBlockList(BlockListingFilter.All))
    {
        Console.WriteLine("Block ID: "   blockListItem.Name);
        Console.WriteLine("Block size: "   blockListItem.Size);
        Console.WriteLine("Is block committed?: "   blockListItem.Committed);
        Console.WriteLine();
    }
}
  

Комментарии:

1. Ну, вот и все. Я уже пробовал этот метод, но без опции фильтра. Странно, что метод empty возвращает не все блоки… Это сбило меня с толку, и я подумал, что незафиксированный блок не возвращается с помощью этого метода. Спасибо, что вы указали на это!

2. Ваши ссылки на MSDN устарели: «К сожалению, запрошенная вами страница не может быть найдена».

Ответ №2:

Возможно, вы захотите изучить класс GetBlockListResponse в Microsoft.WindowsAzure.Клиент хранилища.Пространство имен протокола: http://msdn.microsoft.com/en-us/library/ee758632.aspx

Надеюсь, это поможет

Спасибо

Gaurav