2

localhost でストレージ エミュレーターを動作させることを期待して、これらの手順に従いました。

Windows 8 RTM を使用しています。

  1. Eclipseをダウンロードし、Program Files にコピーしました。
  2. Java JDK 7 をインストールしました。
  3. Azure SDKをインストールしました。
  4. Eclipse 用のAzureプラグインをインストールしました。
  5. 「スタート」画面からストレージエミュレーターを起動。
  6. Java プロジェクトを作成しました。
  7. このプロジェクトの Azure のビルド パスに外部jarを追加しました。
  8. この簡単なサンプル コードを書きました。

    import com.microsoft.windowsazure.services.blob.client.CloudBlobClient;
    import com.microsoft.windowsazure.services.blob.client.CloudBlobContainer;
    import com.microsoft.windowsazure.services.core.storage.CloudStorageAccount;
    
    public class AzureStore {
        public static final String storageConnectionString = "DefaultEndpointsProtocol=http;"
                + "UseDevelopmentStorage=true;"
                + "AccountName=devstoreaccount1;"
                + "BlobEndpoint=http://127.0.0.1:10000;"
                + "AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==";
    
        public static void main(String[] args) throws Exception {
            // Retrieve storage account from connection-string
            CloudStorageAccount storageAccount = CloudStorageAccount
                    .parse(storageConnectionString);
    
            // Create the blob client
            CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
            // Get a reference to a container
            // The container name must be lower case
            CloudBlobContainer container = blobClient
                    .getContainerReference("tweet");
    
            try {
                // Create the container if it does not exist
                System.out.println(container.createIfNotExist());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

次の例外が発生します。

com.microsoft.windowsazure.services.core.storage.StorageException: The value for one of the HTTP headers is not in the correct format.
at com.microsoft.windowsazure.services.core.storage.StorageException.translateException(StorageException.java:104)
at com.microsoft.windowsazure.services.blob.client.CloudBlobContainer$2.execute(CloudBlobContainer.java:334)
at com.microsoft.windowsazure.services.blob.client.CloudBlobContainer$2.execute(CloudBlobContainer.java:291)
at com.microsoft.windowsazure.services.core.storage.utils.implementation.ExecutionEngine.executeWithRetry(ExecutionEngine.java:110)
at com.microsoft.windowsazure.services.blob.client.CloudBlobContainer.createIfNotExist(CloudBlobContainer.java:339)
at com.microsoft.windowsazure.services.blob.client.CloudBlobContainer.createIfNotExist(CloudBlobContainer.java:257)
at AzureStore.main(AzureStore.java:26)

この時点で、何が間違っているのか、私は混乱しています。誰かが私を助けることができますか?

4

2 に答える 2

0

API のストレージ サービスのバージョンが正しくないためにエラーが発生していると思われます。コードでは、開発ストレージに BLOB コンテナーを作成しようとしています。"x-ms-version" 要求ヘッダー値は "2012-02-12" として送信されますが、これは最新のものですが、開発ストレージではまだサポートされていません。開発用ストレージは引き続き「2011-08-18」をサポートしています。

クラウド ストレージに対してコードを試すと、その BLOB コンテナーを作成できるはずです。

開発ストレージに対してのみ開発を行っている場合は、GitHub (https://github.com/WindowsAzure/azure-sdk-for-java/downloads) からソース コードをダウンロードして、次の行を変更することができます。 Constants.java のコードの

public static final String TARGET_STORAGE_VERSION = "2012-02-12";

public static final String TARGET_STORAGE_VERSION = "2011-08-18";

ソースコードを再度コンパイルします。これにより、最新のサービス リリースで導入された一部の新機能 (非同期コピー BLOB など) が機能しなくなる可能性があります。

別の方法としては、新しい SDK が登場するのを待ち、そのバージョンのエミュレーターが最新のストレージ サービス バージョンをサポートすることを期待することです。

于 2012-09-25T08:29:39.777 に答える
0

URIクラスの詳細

以下がうまくいくかどうかを確認してください。

URI BlobEndPoint = new URI("http://127.0.0.1:10000/devstoreaccount1");

CloudBlobClient bClient = new CloudBlobClient(BlobEndPoint, new StorageCredentialsAccountAndKey(AccountName,
                AccountSecurityKey));
于 2012-09-25T04:25:10.887 に答える