Blob容器创建异常

时间:2010-04-12 07:38:45

标签: windows azure azure-storage azure-storage-blobs

每次尝试为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: 

你们知道我做错了什么吗?

9 个答案:

答案 0 :(得分:113)

我的猜测是您使用的容器名称违反了命名规则。检查http://msdn.microsoft.com/en-us/library/dd135715.aspx

答案 1 :(得分:3)

就我而言,模拟器已经过时了。停止模拟器并安装最新的SDK后,问题就消失了。

您可以从此处获取最新的SDK:https://azure.microsoft.com/en-us/downloads/

答案 2 :(得分:2)

这通常是由包含大写字母的容器名称或您的服务帐户名称(AccountName =在配置文件中)包含大写字母引起的。这太蹩脚了。有人可以告诉微软这些是101种反模式。 Azure控制台环境允许您输入帐户名称,例如“LameDuck”,但您必须使用AccountName = lameduck进行连接,否则会因为无法理解的错误消息而在您面前爆炸。当您在Azure控制台中输入LameDuck时,如果您使用此名称,它甚至不会警告您它会在您的脸上爆炸。这是浪费我们的时间,因为我们至少期待一致的反模式 - 期望太多了?如果您不允许使用大写连接,则不要在Azure控制台中使用大写名称创建帐户!但是这些天你应该能够处理大写。 Jeees!

答案 3 :(得分:2)

我得到了完全相同的错误。这是因为我在连接字符串中的帐户名称是用大写字母写的。

我甚至无法通过Visual Studio中的服务器资源管理器连接。

将名称更改为小写后,效果非常好。

答案 4 :(得分:2)

我也花了好几个小时试图解决这个问题 - 我认为理查德有权受到他的咆哮!

关于没有大写字符等的容器的名称有很多帖子。但是,我发现blob引用名称也必须符合。事实上,我有三次违规行为:

  1. 和Richard一样,我在配置文件中的帐户名称中包含大写字母。
  2. 我在容器名称中有大写字母。
  3. 我在blob引用名称中有一个空格。
  4. 如果错误消息毫无意义,则很难找到这些复合错误。问题是错误是在完全相同的代码行引发的,即使原因可能不同。

答案 5 :(得分:0)

根据您的代码段,在初始化storageAccInfo之前,您似乎正在调用CreateBlobClient()。我想这会给你带来麻烦。

答案 6 :(得分:0)

我的问题是模拟器实际上没有启动,我没有意识到这一点。 http://mhuensch.azurewebsites.net/azure-storage-wont-start/

它没有启动,因为模拟器使用端口10000并且与该端口存在冲突。

答案 7 :(得分:0)

Blob引用只能包含小写字符 - 也许你遇到了这个问题?我是。

答案 8 :(得分:0)

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

  

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