我收到了模拟和REAL Azure存储的错误请求(400)消息

时间:2014-01-28 15:40:11

标签: azure azure-storage-blobs

我正在开发一个Azure网站,我想使用Blob存储。我使用的是VS2013,Azure SDK 2.2。我从NuGet尝试过Azure Storage 2.1.0.4,我也尝试过使用最新的3.0.2.0。我已经将模拟器升级到最新预览版本2.2.1,之前我使用的是2.2.0。

我的问题是,如果我指向模拟器或真实存储,我收到错误请求400错误(无效标题)。

我设置了一个非常简单的表单应用程序,只需一个按钮就可以轻松实现。

private void button1_Click(object sender, EventArgs e)
{
   var account = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

   CloudBlobClient blobClient = account.CreateCloudBlobClient();

   CloudBlobContainer container = blobClient.GetContainerReference("UserImages");    

   if (!container.Exists())
   {
      container.Create();
      container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Off });
   }

}

在container.Exists()执行之前,一切看起来都很好,然后我得到一个未处理的错误(错误请求400)。我尝试了一些不同的操作,每次都得到同样无益的消息。

我将Azure连接字符串存储在appSettings部分中,在这个简单的示例中,我尝试指向真实的存储帐户和模拟器,每次都会收到400错误。

我的配置文件包含:

<appSettings>
    <add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=[MyAccountName];AccountKey=[MYREALKEY]" />
</appSettings>

使用VS2013中的服务器资源管理器,我可以愉快地连接到仿真器和实际存储,并且可以毫无问题地访问Blob存储。

这实际上阻止了我添加网站将文件上传到存储帐户的功能。

其他人有这个问题吗?据我所知,我已经尝试过旧版本和重要组件的最新版本。我一直都有SDK 2.2。

感激地收到任何建议。

有关信息,我按照此示例进行了操作,我在Azure管理门户中找到了该示例: http://www.windowsazure.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs-20/

由于

伊恩

2 个答案:

答案 0 :(得分:3)

要查看命名规则,请查看以下链接:http://msdn.microsoft.com/en-us/library/windowsazure/dd135715.aspx。从此文档页面:

  

容器名称必须是有效的DNS名称,符合以下条件   命名规则:

     
      
  • 容器名称必须以字母或数字开头,并且只能包含字母,数字和短划线( - )字符。

  •   
  • 每个短划线( - )字符必须紧跟在字母或数字之后;在。中不允许连续破折号   容器名称。

  •   
  • 容器名称中的所有字母都必须小写。

  •   
  • 容器名称长度必须介于3到63个字符之间。

  •   

关于使用存储模拟器获取400错误,请检查存储客户端库版本。如果它是3.x,那么您需要安装今天预览版中发布的存储模拟器2.2.1。有关这方面的更多信息,请访问:http://blogs.msdn.com/b/windowsazurestorage/archive/2014/01/16/windows-azure-storage-emulator-2-2-1-preview-release-with-support-for-2013-08-15-version.aspx

答案 1 :(得分:3)

这让我疯了两天。安装/卸载SDK,模拟器,Azure存储NuGet包等。我终于让模拟器工作以及真正的存储。您下载以安装模拟器2.2.1的预览版本的MSI包含自述文件 - 我不知道它在那里,但它包含一些非常重要的说明!

3. Copy all files from the following path:

        For 32-bit OS: "%ProgramFiles%\Windows Azure Storage Emulator 2.2.1\devstore"
        For 64-bit OS: "%ProgramFiles(x86)%\Windows Azure Storage Emulator 2.2.1\devstore"

   to the following path:

        "%ProgramFiles%\Microsoft SDKs\Windows Azure\Emulator\devstore"

   If prompted, choose to replace the existing files with the new ones.

事实证明MSI在运行时不会更新模拟器实际使用的文件!您必须手动执行此任务。没有看到这个基本指令,我觉得太愚蠢了。原来RTFM就是答案!