2013-12-12 107 views
1

我正在嘗試使用Windows Azure開發多層雲應用程序。爲了存儲我的數據,我選擇了Azure存儲表和Azure存儲Blob。使用類庫訪問Windows Azure存儲

我的應用程序的不同層使用相同的一組功能,但方式不同。例如他們都必須能夠訪問blob。我決定讓單個類庫訪問Windows Azure Blob存儲,但是我遇到了400錯誤。

當我直接從我的工作者角色連接到Blob時,它工作正常,但是當我從類庫調用類時,它失敗,出現400狀態碼(錯誤請求)。 這裏是我的代碼:

public class TestClass 
{ 

    public static void Test() 
    { 
     string s = CloudConfigurationManager.GetSetting("StorageCS"); 
     CloudStorageAccount account = CloudStorageAccount.Parse 
      (
      s 
      ); 

     CloudBlobClient client = account.CreateCloudBlobClient(); 

     CloudBlobContainer container = 
          client.GetContainerReference("mycontainer"); 

     container.CreateIfNotExists(BlobContainerPublicAccessType.Blob); 

    } 

} 

這是隻是試圖訪問BLOB容器中的測試類。 當我在我的工作者角色中使用這個類時,它工作正常。如果我從另一個輔助角色引用此輔助角色,並在第二個角色中使用此類,則該方法起作用,但如果將此類移動到外部類庫,則會失敗。 'container.CreateIfNotExists(BlobContainerPublicAccessType.Blob);'行中引發異常這是一個StorageException,'400'。錯誤的請求「消息。

我正在使用Azure存儲模擬器。使用調試器,我已經檢查了給出的CloudStorageAccount.Parse方法有一個corrent連接字符串(「UseDevelopmentStorage = true」),無論如何(直接從其他worker角色構造類庫)使用class。似乎無法使用類庫訪問Azure存儲?

+0

不,您確定可以訪問Azure。當你使用模擬器時,它使用了開發存儲,它在本地。您在Azure上有存儲帳戶嗎? – Matt

回答

5

請檢查您的類庫項目中存儲客戶端庫的版本。很有可能它是3.0.0.0版本。如果是這樣的話,請注意目前版本3.0.0.0的存儲客戶端庫與存儲模擬器(開發存儲)不兼容。這是因爲該庫使用最新版本的存儲REST API,並且該模擬器在此之前僅支持一個版本。兼容性問題突出了存儲團隊博客在這裏:http://blogs.msdn.com/b/windowsazurestorage/archive/2013/11/27/windows-azure-storage-release-introducing-cors-json-minute-metrics-and-more.aspx(請閱讀「存儲模擬器指導」部分對帖子的末尾)

我的建議是降級存儲客戶端庫以前的版本(2.1.0.4 )。您可以通過Nuget Package Manager控制檯安裝此版本,並在其中輸入以下命令:Install-Package WindowsAzure.Storage -Version 2.1.0.4