3

背景

グラフ作成アプリケーションを使用して計算結果を表示するASP.NETアプリケーション(C#)という1つのWebロールを持つAzureアプリケーションがあります。チャート作成アプリケーションには、入力としてXMLファイルが必要です。このXMLファイル(JavaScriptで参照)にアクセスするために、XDocumentおよび関連するクラスを使用してファイルを操作し、保存します。グラフコントロールはページの更新時に読み込まれます。

エラー

コンテナオブジェクトを操作(GetPermissions、Create、Create if not presentなど)しようとすると、次のエラーが発生します。

サーバーはリクエストの認証に失敗しました。Authorizationヘッダーの値が署名を含めて正しく形成されていることを確認してください。

また、SpaceBlockを使用して事前にコンテナを作成してみましたが、結果を変更する必要はなかったようです。

コード

これが私がPage_Loadで呼び出している関数です。エラーは太字の行で発生します(GetPermissions):

    private void InitializeStorage()
    {
        if (storageInitialized)
        {
            return;
        }

        lock (gate)
        {
            if (storageInitialized)
            {
                return;
            }

            try
            {
                CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
                {
                    configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
                });

                // read account configuration settings
                var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");

                // create blob container for images
                blobStorage = storageAccount.CreateCloudBlobClient();
                CloudBlobContainer container = blobStorage.GetContainerReference("xml");

                // configure container for public access
                **var permissions = container.GetPermissions();**
                permissions.PublicAccess = BlobContainerPublicAccessType.Container;
                container.SetPermissions(permissions);

                CloudBlob opcBlob = container.GetBlobReference("OptionPriceChart.xml");
                opcBlob.DownloadToFile("opcLocal.xml");

            }
            catch (WebException)
            {
                throw new WebException("Storage services initialization failure. "
                    + "Check your storage account configuration settings. If running locally, "
                    + "ensure that the Development Storage service is running.");
            }

            storageInitialized = true;
        }
    }
4

1 に答える 1

1

あなたが提供したコードには、あなたが話している問題を引き起こすものは何もありません。CreateIfNotExistそうしないと、The specified container does not existエラーが発生します(これは、現在の問題に遭遇する前に行っていたと推測しています)。

コードが問題ないように見えるので、問題を引き起こしているのは環境内の何か、おそらく接続文字列であることを意味している可能性があります。接続文字列をいじって問題を再現しようとしましたが、まったく同じエラーを取得できた唯一の方法は、別のアカウントからAccountName有効なを使用することでした。AccountKeyしたがって、Azure portal に戻り、ストレージ サービスに移動して、プライマリ アクセス キーをクラウド構成にコピーすることをお勧めします。

于 2010-11-09T20:42:12.517 に答える