Azure blob存储会抛出StorageClientException:“其中一个请求输入超出范围”

时间:2012-08-05 16:36:55

标签: .net azure azure-storage-blobs

尝试从在Cloud Services Web角色中运行的Azure存储帐户进行读取会抛出

[StorageClientException: One of the request inputs is out of range.]
Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result() +96
Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait() +271
Microsoft.WindowsAzure.StorageClient.CloudBlobContainer.SetPermissions(BlobContainerPermissions permissions, BlobRequestOptions options) +229

我在该主题上发现的所有文章都表明问题是存储连接字符串或blob容器名称中的大写字母。

以下是代码:

var cloudStorageAccount = CloudStorageAccount.FromConfigurationSetting(StorageConnectionStringConfigKey);
var blobClient = cloudStorageAccount.CreateCloudBlobClient();
var blobContainerName = "containername";
var blobContainer = blobClient.GetContainerReference(blobContainerName.ToLower(CultureInfo.InvariantCulture));
var permissions = new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Container };
blobContainer.SetPermissions(permissions);
var blobName = "SomeXmlFile.xml";
var blob = blobContainer.GetBlobReference(blobName);
var text = blob.DownloadText();

blobContainer.SetPermissions抛出异常。

当使用来自计算模拟器的相同代码和相同凭据访问同一容器时,而不是来自实时Web角色,一切正常。我可以毫不费力地从Neudesic的Azure存储资源管理器中读取blob容器。

可能相关:我的本地环境只有2012年6月的Azure SDK(版本1.7)。此外,我最近将应用程序从1.0.8升级到Postmark 1.0.14,以及它依赖Newtownsoft Json.NET(从4.0升至4.5.8)。

我要逐行构建一个应用程序,没有包,只是为了测试连接,然后添加包。

有没有人在他们完全确定所有的信用卡和标识符字符串都是正确的小写之前看过这个?

1 个答案:

答案 0 :(得分:3)

哇,我是傻瓜。

问题原来是这样的:我有两个设置:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Cloud" ...>
  <WebRole name="WebRole" vmsize="Small">
    <ConfigurationSettings>
      <Setting name="MessagesConfigurationBlobName" />
      <Setting name="MessagesConfigurationBlobContainerName" />
    </ConfigurationSettings>
  </WebRole>
</ServiceDefinition>

这是本地(模拟器)配置文件:

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration ...>
  <Role name="WebRole">
    <ConfigurationSettings>
      <Setting name="MessagesConfigurationBlobName" value="LocalMessageConfig.xml"/>
      <Setting name="MessagesConfigurationBlobContainerName" value="containername"/>
    </ConfigurationSettings>
  </Role >
</ServiceConfiguration>

这是云文件:

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration ...>
  <Role name="WebRole">
    <ConfigurationSettings>
      <Setting name="MessagesConfigurationBlobName" value="containername" />
      <Setting name="MessagesConfigurationBlobContainerName" value="CloudMessageConfig.xml"/>
    </ConfigurationSettings>
  </Role >
</ServiceConfiguration>

我现在好好哭了,并将我的时间跟踪(周六凌晨3点)从“紧急客户工作”调整为“开发者PEBCAK”。

故事的寓意是,当相同的代码在一个环境中失败并在另一个环境中成功时,不要仅仅比较环境,在环境之间比较在您自己的代码中可能不同的所有内容

哦,不要尝试在凌晨3点部署软件。如初。