【问题标题】:Blob container creation exceptionBlob 容器创建异常
【发布时间】:2011-02-06 21:51:05
【问题描述】:

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

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

【问题讨论】:

    标签: windows azure azure-storage azure-blob-storage


    【解决方案1】:

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

    【讨论】:

    • 容器名称中的所有字母必须小写。谢谢!固定
    • 谢谢!我被困了几个小时。
    【解决方案2】:

    我也有同样的例外。解决方法:将容器名称改为小写。

    例外情况:

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

    工作正常:

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

    【讨论】:

    • 这就是我的答案。谢谢。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 请通过 cmets 不回答你的愤怒!
      • 我似乎没有那么生气,比其他任何事情都更沮丧;这是启动的正确答案。更不用说关于反模式的良好反馈(尽管,他正在向合唱团讲道)。我自己对此有点沮丧,所以我想我可以看到他来自哪里。
      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

        我也花了好几个小时试图解决这个问题 - 我认为 Richard 有权发表他的言论!

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

        1. 与 Richard 一样,我在配置文件中的帐户名称中包含大写字母。
        2. 容器名称中有大写字母。
        3. 我在 blob 引用名称中有一个空格。

        如果错误消息毫无意义,则很难追踪这些复合错误。问题是错误是在完全相同的代码行中引发的,即使原因可能不同。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

          • 我只是跳过了那一行。注释指示 storageAccInfo 初始化的行。
          • 对不起 - 也许我误解了。但是你有评论的地方是在你对 CreateBlobClient 的调用“之后”,它应该发生在调用“之前”。不是想学究气。
          【解决方案8】:

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

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

          【讨论】:

            【解决方案9】:

            Blob 引用只能包含小写字符 - 也许您遇到了这种情况?我是。

            【讨论】:

              【解决方案10】:

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

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

              【讨论】:

                猜你喜欢
                • 2011-02-24
                • 1970-01-01
                • 2018-11-01
                • 2016-08-31
                • 2020-09-15
                • 2013-02-23
                • 1970-01-01
                • 2011-02-06
                • 2014-06-29
                相关资源
                最近更新 更多