当前位置: 首页 > 知识库问答 >
问题:

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

陈斌蔚
2023-03-14

尝试从云服务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。设置权限。

当使用相同的代码和相同的凭证从计算仿真器(而不是从实时Web角色)访问相同的容器时,一切正常。我从Neudesic的Azure存储资源管理器中读取blob容器没有问题。

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

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

以前有人看到过这样的情况吗?他们完全确定所有的cred和标识符字符串都是正确的小写?

共有1个答案

郝乐心
2023-03-14

哇,我真笨。

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

<?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点部署软件。永远不要。

 类似资料:
  • Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。 还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。你可以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为p

  • 问题内容: 我正在研究一个简单的脚本,涉及CAS,jspring安全检查,重定向等。我想使用Kenneth Reitz的python请求,因为这是一项很棒的工作!但是,CAS需要通过SSL进行验证,因此我必须首先通过该步骤。我不知道Python请求是什么?该SSL证书应该存放在哪里? 问题答案: 你遇到的问题是由不受信任的SSL证书引起的。 就像之前评论中提到的一样,最快的解决方法是设置: 请注意

  • 我尝试发送一个删除请求到我的服务器,但我得到一个400坏的请求错误代码。我找了很多,但我找不到任何有帮助解决方案。当我尝试与邮差,请求工作良好。 这是来自Postman的curl命令的外观: 这是我的Java代码: 我还尝试在头中不设置Content-Type,但当我得到一个415错误时,我还删除了getBodyContentType()方法,但这也没有改变。 还有什么能帮上忙的点子吗?

  • 问题内容: 在Java中,我使用的是方法,但不确定为什么它不会引发“索引不足”错误。 字符串的索引从0到4开头,但是基于我可以调用foo.substring(0)并获取“ abcde”的事实,该方法将startIndex和endIndex作为参数。 那么为什么substring(5)起作用?该索引应超出范围。有什么解释? 此代码输出: 当我用6替换5时: 然后我得到错误: 问题答案: 根据Java

  • 因此,我是Java新手,正在尝试将一个变量从扫描器传递到getter/setter方法,以便根据输入的数字对数组进行不同的排序。 我把它放在列表排序的地方;问题是我的扫描仪重复了你必须在列表出现之前多次输入你的选择。 我知道这个问题与调用“int c=assign_6.choice()”有关。如果我硬编码一个数字,它没问题,但它似乎正在多次调用select()函数。 我尝试过将函数移出main,删

  • 此请求引发了一个带有PostgreSQL的语句超时。 原因:org.postgresql.util.psqlexception:错误:由于在org.postgresql.core.v3.queryexecutorimpl.receiveerrorresponse(queryexecutorimpl.java:1525)在org.postgresql.core.v3.queryexecutorimp