2013-04-17 131 views
2

我们有一个azure blob存储,并启用了日志记录。 我可以查看这些日志并使用管理门户下载斑点。 但现在我试图使用客户端API列出这些日志。沿线 东西:

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

但是,这将引发一个Web异常代码400 Bad Request。 我可以。但是,请列出此客户端上其他容器的blob。 我知道我需要为这个容器进行身份验证,但我使用的主要访问密钥的凭据。 那么,为什么我不能得到$日志blob?

感谢

+1

我试过了,它为我工作。你能告诉我你使用的是什么版本的存储客户端库吗?我同时使用1.8和2.0,并在两种情况下都能正常工作。 –

+0

在我的机器上它是1.7.0 ...嗯..在哪里更新? :) –

+0

您可以从http://www.windowsazure.com/en-us/downloads/下载最新的SDK或从Nuget引用最新的存储客户端库:http://nuget.org/packages/WindowsAzure.Storage/ 。 HTH。 –

回答

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 

上面的代码需要存储客户端库2.0。

你回来只有一个项目的原因是因为你打电话ListBlobs函数没有参数。如果您在这里查看此函数的定义(http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.storage.blob.cloudblobcontainer.listblobs.aspx),您会发现通过将useFlatBlobListing参数指定为true(我在上面的代码中指定),可以将所有Blob都存储在Blob容器中。试试看,它会返回blob容器中所有斑点的列表。

+0

非常感谢:)最后,我将useFlatBlobListing设置为false,并想知道为什么这没有效果... –

+1

我只是太好奇,是什么语言? :) – astaykov

+1

语言是F#。 –