試圖從內部雲服務Web角色運行的Azure存儲帳戶讀取拋出Azure的Blob存儲拋出StorageClientException:「其中一個請求輸入超出範圍」
[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存儲資源管理器讀取blob容器沒有問題。
可能相關的:我的本地環境中只能有2012年6月Azure的SDK(1.7版本)。此外,我最近將應用程序從1.0.8升級到Postmark 1.0.14,以及它的依賴Newtownsoft Json.NET(從4.0到4.5.8)。
我要建立由線的申請行,不包,只是爲了測試連接,然後添加包英寸
有沒有人,當他們見過這個絕對肯定所有信用和標識符字符串正確地小寫?
這將有助於如果你能發佈一些代碼 – 2012-08-05 16:49:26
還有其他的方案,這將導致錯誤 - 例如,一個分區鍵/行鍵與無效字符,這是超出範圍的日期。這些都是表格存儲,但不是一團糟。您可以嘗試通過RDP在VM上使用Fiddler來捕獲跨越的HTTP請求。 – 2012-08-05 16:58:37
你確定容器(在實際的blob存儲中)存在嗎?在嘗試設置權限之前嘗試'container.CreateIfNotExists()'? – smarx 2012-08-05 18:07:28