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: 

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

4

10 回答 10

114

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

于 2010-04-12T18:33:03.310 回答
14

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

除了:

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

工作正常:

CloudBlobContainer container = blobClient.GetContainerReference("script");
container.CreateIfNotExist();
于 2012-03-19T06:33:21.093 回答
3

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

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

于 2015-10-12T07:49:16.100 回答
2

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

于 2010-05-21T14:16:48.453 回答
2

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

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

将名称更改为小写后,它工作得很好。

于 2012-01-27T12:23:09.070 回答
2

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

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

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

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

于 2012-05-19T14:31:16.783 回答
0

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

于 2010-04-12T09:54:13.390 回答
0

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

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

于 2015-06-17T17:25:52.170 回答
0

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

于 2017-07-22T01:16:43.030 回答
0

就我而言,我发现存储模拟器应该更新,我意识到捕获StorageException异常并检查RequestInformation属性,而该属性又具有另一个名为HttpStatusMessage. 那条消息说:

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

于 2018-06-11T21:50:59.583 回答