2012-12-02 25 views
0

在我的程序中,我有多個點連接到Blob存儲以讀取/寫入文件。他們都很好。然而,在不同的功能,但同一類,其中另一個Blob存儲參考了,我正在一個ArgumentNullException指出「值不能爲空」,從下面的代碼行:檢索Blob存儲帳戶時出現空值異常

CloudStorageAccount account = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 

我知道StorageConnectionString是正確配置,因爲當我使用此函數刪除代碼行時,同一行代碼在其他函數中起作用。任何人都可以提供一些見解,爲什麼這一個功能導致一個問題,而不是其他問題?

不知道這是否太有幫助,但這裏是我使用的4行代碼。這是非常標準的。

CloudStorageAccount account = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 
CloudBlobClient client = account.CreateCloudBlobClient(); 
CloudBlobContainer container = client.GetContainerReference(CONTAINER); 
CloudBlockBlob blob = container.GetBlockBlobReference(FilePath(null, imageId)); 
+0

你能舉一個你的連接字符串(沒有實際的鍵)的例子嗎?你所有的功能,運行在同一個進程中的工作和不工作的功能(例如:Web角色中的應用程序池)是什麼? –

+0

連接字符串是下如下: <添加鍵= 「StorageConnectionString」 值= 「DefaultEndpointsProtocol = HTTP;帳戶名= [名稱]; AccountKey = [KEY]」/> 的工作是在同一個過程中的功能和網絡角色。 – TheKarateKid

回答

0

根據您的評論,這可能與您將連接字符串存儲在web.config中有關。在某些情況下,它可能看起來像你的代碼運行在同一個進程中,但事實上並非如此。例如,以WebRole.cs/WorkerRole.cs類爲例。簡而言之,這些類中的代碼將運行在不同的進程中,這意味着它們將無法訪問您的web.config。例如,WebRole.cs將從WaIISHost.exe.config文件中讀取其設置。

您可以從web.config中刪除連接字符串並將其添加到服務配置嗎?你不需要修改代碼,因爲CloudConfigurationManager會看在服務配置第一,如果沒有發現這裏的設置將回落到web/app.config中

enter image description here

注意:在這個答案我假設你正在使用一個Web角色,而不是一個網站。

+0

這正是問題所在。它所起作用的功能是從WebRole中調用的,而它不起作用的功能正由WorkerRole調用。我已經將StorageConnectionString添加到WorkerRole的服務配置中,問題已解決。非常感謝! – TheKarateKid

相關問題