2013-04-17 2 views
2

У нас есть хранилище azure blob с включенным протоколированием. Я могу просмотреть эти журналы и загрузить капли с помощью портала управления. Но теперь я пытаюсь перечислить эти журналы с помощью Client api. Что-то вдоль линий:

let account = new CloudStorageAccount(credentials, true) 
let client = account.CreateCloudBlobClient() 
let container = client.GetContainerReference "$logs" 
container.ListBlobs() 

Но это бросает код веб-исключение 400 Bad Request. Я могу. однако, список blobs из других контейнеров на этом клиенте. Я понимаю, что мне нужно пройти аутентификацию для этого контейнера, но я использую ключ первичного доступа для учетных данных. Так почему я не могу получить $ logs blobs?

Благодаря

+1

Я попробовал, и это сработало для меня. Можете ли вы рассказать мне, какую версию клиентской библиотеки хранилища вы используете? Я использовал и 1.8, и 2.0, и работал в обоих случаях. –

+0

на моей машине это 1,7.0 ... um .. где обновить? :) –

+0

Вы можете загрузить последнюю версию SDK с http://www.windowsazure.com/en-us/downloads/ или ссылаться на последние библиотеки клиентских хранилищ от Nuget: http://nuget.org/packages/WindowsAzure.Storage/ , НТН. –

ответ

4

Как я уже говорил в моих комментариях выше, вам нужно будет использовать последнюю версию клиентской библиотеки для хранения, которые вы можете получить от NuGet: http://nuget.org/packages/WindowsAzure.Storage/.

Вот пример кода:

open Microsoft.WindowsAzure.Storage 
open Microsoft.WindowsAzure.Storage.Auth 
open Microsoft.WindowsAzure.Storage.Blob 

[<EntryPoint>] 
let main argv = 
    let credentials = new StorageCredentials("accountname", "accountkey") 
    System.Console.WriteLine(credentials.AccountName) 
    let account = new CloudStorageAccount(credentials, true) 
    System.Console.WriteLine(account.BlobEndpoint) 
    let client = account.CreateCloudBlobClient(); 
    let container = client.GetContainerReference "$logs" 
    System.Console.WriteLine(container.Uri) 
    let blobs = container.ListBlobs("", true, BlobListingDetails.All, null, null); 
    for blob in blobs do 
     System.Console.WriteLine(blob.Uri) 
    let response = System.Console.ReadLine() 
    0 // return an integer exit code 

Приведенный выше код необходим для хранения Client Library 2.0.

Причина, по которой вы возвращаете только один элемент, - это то, что вы вызываете функцию ListBlobs без параметров. Если вы посмотрите на определение этой функции здесь (http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.storage.blob.cloudblobcontainer.listblobs.aspx), вы увидите, что вы можете получить все капли в контейнере blob, указав параметр useFlatBlobListing в true (что я сделал в приведенном выше коде). Попробуйте, он вернет список всех блоков в вашем контейнере blob.

+0

Большое спасибо :) В конце концов я установил useFlatBlobListing в false и задался вопросом, почему это не повлияло ... –

+1

Мне просто интересно, какой язык? :) – astaykov

+1

Язык F #. –

Смежные вопросы