2012-08-05 23 views
1

試圖從內部雲服務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)。

我要建立由線的申請行,不包,只是爲了測試連接,然後添加包英寸

有沒有人,當他們見過這個絕對肯定所有信用和標識符字符串正確地小寫?

+0

這將有助於如果你能發佈一些代碼 – 2012-08-05 16:49:26

+0

還有其他的方案,這將導致錯誤 - 例如,一個分區鍵/行鍵與無效字符,這是超出範圍的日期。這些都是表格存儲,但不是一團糟。您可以嘗試通過RDP在VM上使用Fiddler來捕獲跨越的HTTP請求。 – 2012-08-05 16:58:37

+0

你確定容器(在實際的blob存儲中)存在嗎?在嘗試設置權限之前嘗試'container.CreateIfNotExists()'? – smarx 2012-08-05 18:07:28

回答

3

哇,我是愚蠢的。

原來,這個問題是這樣的:我有兩個設置:

<?xml version="1.0" encoding="utf-8"?> 
<ServiceDefinition name="Cloud" ...> 
    <WebRole name="WebRole" vmsize="Small"> 
    <ConfigurationSettings> 
     <Setting name="MessagesConfigurationBlobName" /> 
     <Setting name="MessagesConfigurationBlobContainerName" /> 
    </ConfigurationSettings> 
    </WebRole> 
</ServiceDefinition> 

這裏的本地(模擬器)配置文件:

<?xml version="1.0" encoding="utf-8"?> 
<ServiceConfiguration ...> 
    <Role name="WebRole"> 
    <ConfigurationSettings> 
     <Setting name="MessagesConfigurationBlobName" value="LocalMessageConfig.xml"/> 
     <Setting name="MessagesConfigurationBlobContainerName" value="containername"/> 
    </ConfigurationSettings> 
    </Role > 
</ServiceConfiguration> 

這裏的雲文件:

<?xml version="1.0" encoding="utf-8"?> 
<ServiceConfiguration ...> 
    <Role name="WebRole"> 
    <ConfigurationSettings> 
     <Setting name="MessagesConfigurationBlobName" value="containername" /> 
     <Setting name="MessagesConfigurationBlobContainerName" value="CloudMessageConfig.xml"/> 
    </ConfigurationSettings> 
    </Role > 
</ServiceConfiguration> 

我現在會有一個很好的哭聲,並將我的時間跟蹤(在星期六凌晨3點)從「緊急客戶工作」調整到「開發人員PEBCAK」。

這個故事的寓意是,當同一代碼在一個環境中失敗,並在另一個成功,不只是比較的環境中,比較一切,這可能是在環境之間你自己的代碼不同。

哦,不要試圖在凌晨3點部署軟件。永遠。

相關問題