3

ログ記録が有効になっている Azure BLOB ストレージがあります。これらのログを表示し、管理ポータルを使用して BLOB をダウンロードできます。しかし今、クライアント API を使用してこれらのログを一覧表示しようとしています。線に沿った何か:

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

しかし、これは Web 例外コードをスローします400 Bad Request。できます。ただし、このクライアントの他のコンテナーからの BLOB を一覧表示します。このコンテナーに対して認証を受ける必要があることは理解していますが、資格情報にプライマリ アクセス キーを使用しています。では、なぜ $logs ブロブを取得できないのでしょうか?

ありがとう

4

1 に答える 1

5

上記のコメントで述べたように、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

上記のコードには Storage Client Library 2.0 が必要です。

ListBlobsアイテムが 1 つしか返されないのは、パラメーターなしで関数を呼び出しているためです。ここ ( http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.storage.blob.cloudblobcontainer.listblobs.aspx ) でこの関数の定義を見ると、useFlatBlobListingパラメーターを trueに指定することで、BLOB コンテナー内のすべての BLOB を取得できます (上記のコードでこれを行いました)。試してみてください。BLOB コンテナー内のすべての BLOB のリストが返されます。

于 2013-04-17T15:40:04.860 に答える