Blob容器创建异常

41
每次我尝试为blob创建一个容器时,都会出现异常。
使用以下代码:
CloudStorageAccount storageAccInfo;
CloudBlobClient blobStorageType;
CloudBlobContainer ContBlob;

blobStorageType = storageAccInfo.CreateCloudBlobClient();

//then I initialize storageAccInfo

ContBlob = blobStorageType.GetContainerReference(containerName);
//everything fine till here ; next line creates an exception

ContBlob.CreateIfNotExist();

Microsoft.WindowsAzure.StorageClient.StorageClientException was unhandled
  Message="One of the request inputs is out of range."
  Source="Microsoft.WindowsAzure.StorageClient"
  StackTrace:
       at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()
       at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait()
       at Microsoft.WindowsAzure.StorageClient.TaskImplHelper.ExecuteImplWithRetry[T](Func`2 impl, RetryPolicy policy)
       at Microsoft.WindowsAzure.StorageClient.CloudBlobContainer.CreateIfNotExist(BlobRequestOptions options)
       at Microsoft.WindowsAzure.StorageClient.CloudBlobContainer.CreateIfNotExist()
       at WebRole1.BlobFun..ctor() in C:\Users\cloud\Documents\Visual Studio 2008\Projects\CloudBlob\WebRole1\BlobFun.cs:line 58
       at WebRole1.BlobFun.calling1() in C:\Users\cloud\Documents\Visual Studio 2008\Projects\CloudBlob\WebRole1\BlobFun.cs:line 29
       at AzureBlobTester.Program.Main(String[] args) in C:\Users\cloud\Documents\Visual Studio 2008\Projects\CloudBlob\AzureBlobTester\Program.cs:line 19
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.Net.WebException
       Message="The remote server returned an error: (400) Bad Request."
       Source="System"
       StackTrace:
            at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
            at Microsoft.WindowsAzure.StorageClient.EventHelper.ProcessWebResponse(WebRequest req, IAsyncResult asyncResult, EventHandler`1 handler, Object sender)
       InnerException: 

你们知道我做错了什么吗?
10个回答

115

39
容器名称中的所有字母必须为小写。 - Egon
谢谢!我卡在那里好几个小时了。 - Steve French

14

我遇到了相同的异常。解决方法是:将容器名称改为小写。

异常信息:

CloudBlobContainer container = blobClient.GetContainerReference("Script");
container.CreateIfNotExist();

正常工作:

CloudBlobContainer container = blobClient.GetContainerReference("script");
container.CreateIfNotExist();

2
这对我来说是答案。谢谢。 - Andrew Garrison

3

2
这通常是由于容器名称中含有大写字母或配置文件中的服务帐户名称(AccountName=)包含大写字母所致。这太糟糕了。能否告诉微软这些都是101种反模式。Azure控制台环境允许您输入一个帐户名,例如“LameDuck”,但您必须使用AccountName=lameduck连接,否则会出现无法理解的错误消息。当您在Azure控制台中输入LameDuck时,它甚至不会警告您,如果您使用完全相同的名称,它会出现错误。这浪费了我们的时间,因为我们至少期望一致的反模式-这太难要求了吗?如果不允许使用大写字母进行连接,则不要允许在Azure控制台中创建具有大写字母名称的帐户!但是这些天你应该能够处理大写字母。天啊!

2
请通过评论而非回答来表达您的愤怒! - Egon
对我来说,他似乎并不那么生气,更多的是沮丧;而且这也是正确的答案。更不用说关于反模式的好反馈了(尽管他在向已经明白的人宣讲)。我自己也有点沮丧,所以我想我可以理解他的想法。 - BrainSlugs83

2

我遇到了完全相同的错误。这是因为我的连接字符串中账户名使用了大写字母

甚至在Visual Studio的服务器资源管理器中也无法连接。

将账户名改为小写字母后,问题得到了完美解决。


2
我也花了几个小时来解决这个问题——我认为Richard有权发泄一下!
有很多帖子关于容器名称不能有大写字母等问题。但是,我发现Blob引用名称也必须符合要求。事实上,我有三个违规问题:
1.像Richard一样,在配置文件中我的帐户名称有大写字母。 2.容器名称中有大写字母。 3.Blob引用名称中有一个空格。
如果错误消息没有意义,那么这些复合错误很难跟踪。问题在于错误会在完全相同的代码行抛出,即使原因可能不同。

0

0

根据您的代码片段,看起来您在初始化storageAccInfo之前调用了CreateBlobClient()。我想这会给您带来麻烦。


我只是跳过了那一行。注释指出了初始化storageAccInfo的行。 - Egon
抱歉 - 或许我误解了。但是你的注释所在的位置是在调用CreateBlobClient之后,而它应该在调用之前出现。我并不是想卖弄学问。 - David Makogon

0

Blob 引用只能使用小写字符 - 也许你遇到了这个问题?我曾经遇到过。


0
在我的情况下,我发现需要更新存储模拟器,并且我意识到要捕获StorageException异常并检查RequestInformation属性,该属性又具有另一个名为HttpStatusMessage的字符串属性。那个消息说:

此请求的REST版本不受此版本的存储模拟器支持。请将存储模拟器升级到最新版本。有关更多信息,请参见以下URL:http://go.microsoft.com/fwlink/?LinkId=392237


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接