1

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 Storage Explorer から BLOB コンテナーを問題なく読み取ることができます。

関連する可能性があります: 私のローカル環境には、2012 年 6 月の Azure SDK (バージョン 1.7) しかありません。また、最近アプリケーションを 1.0.8 から Postmark 1.0.14 にアップグレードし、その依存関係である Newtownsoft Json.NET (4.0 から 4.5.8 に) もアップグレードしました。

接続をテストするためだけに、パッケージを使用せずにアプリケーションを 1 行ずつビルドしてから、パッケージを追加します。

すべてのクレジットと識別子文字列が正しく小文字であることが絶対に確実であるときに、これを見た人はいますか?

4

1 に答える 1

3

うわー、私は愚かですか。

問題はこれであることが判明しました:私には2つの設定があります:

<?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>

私は今、良い泣き声を上げて、「緊急クライアント作業」から「開発者 PEBCAK」までの時間追跡 (土曜日の午前 3 時) を調整します。

この話の教訓は、同一のコードがある環境で失敗し、別の環境で成功する場合、単に環境を比較するのではなく、環境間で独自のコードで異なる可能性のあるすべてのものを比較することです。

ああ、午前 3 時にソフトウェアを展開しようとしないでください。これまで。

于 2012-08-06T17:05:17.600 に答える