2012-09-25 43 views
2

我遵循這些步驟,希望在本地主機上運行存儲模擬器。Azure SDK + Java庫+ Eclipse插件=一個迷茫的靈魂

我正在使用Windows 8 RTM。

  1. 已下載Eclipse並將其複製到Program Files。
  2. 安裝Java JDK 7.
  3. 安裝Azure SDK
  4. Eclipse安裝了Azure plugin
  5. 從「開始」屏幕啓動存儲模擬器。
  6. 創建一個Java項目。
  7. 在此項目的Azure構建路徑中添加了外部jars
  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) 

我很困惑,在這一點上,什麼可能是錯誤的。有人能幫我嗎?

+0

喜歡標題:) –

回答

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出來,並希望該版本中的仿真器支持最新的存儲服務版。

+0

JAR版本的以前版本是否歸檔到某個位置?你知道嗎? – foobarometer

+0

不知道這是否會工作:http://www.windowsazure4j.org/ –

+0

我做了改變,它沒有奏效。同樣的錯誤。我想也許還有其他地方。 – foobarometer

0

更多URI

看看下面爲你工作。

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

CloudBlobClient bClient = new CloudBlobClient(BlobEndPoint, new StorageCredentialsAccountAndKey(AccountName, 
       AccountSecurityKey)); 
+0

你想讓我使用URI?它適用於我[我的其他問題](http://stackoverflow.com/questions/12549634/java-azure-request-signing/12549855#12549855) – foobarometer

+0

不,沒有工作! – foobarometer