2012-11-24 140 views
9

雖然WCFService WebRole使用的Windows Azure表存儲,試圖通過以下方式來創建CloudStorageAccount:無法創建Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener

storageAccount = 
CloudStorageAccount.Parse(Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("[Setting name]")) 

獲取例外:

ConfigurationErrorsException「無法創建Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,Microsoft.WindowsAzure.Diagnostics,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35。「

MSDN幫助說:1)Visual Studio必須以管理員身份運行。 2)角色必須在完全信任下運行(將.NET信任級別選項更改爲完全信任)。

全部完成,但我仍然有相同的例外。

回答

20

可能導致此錯誤的一件事是運行Web角色本身,而不是運行包含的雲項目。如果這是問題,您可以通過確保將雲項目設置爲用於調試的啓動項目而不是Web角色來解決此問題。

運行定義Web角色的ASP.NET項目是可能的,有時很有用。這比在Azure計算模擬器中運行更快。它也可以讓你開發你的項目,而不必運行VS提升。另外,我發現仿真器往往會導致Visual Studio不時報告無效的內存訪問錯誤,此時您需要重新啓動VS.直接運行Web角色可避免所有這些問題。

但是,有些事情可能會阻止它的工作,並且您描述的異常是這些問題之一的症狀。如果您的Web角色的Web.config包含Azure的DiagnosticMonitorTraceListener的配置(並且Visual Studio在創建Web角色時默認添加了該配置),那麼嘗試生成跟蹤輸出的第一件事情會因您在仿真器外部運行時描述的錯誤而崩潰。正如它發生的那樣,從CloudConfigurationManager檢索一個設置似乎是這樣做的。順便說一下,這不是CloudConfigurationManager的特殊情況。它所做的只是產生一些跟蹤輸出。 VS將Web角色配置爲將所有跟蹤輸出發送到Azure診斷監聽器,並且由於該監聽器只能在計算模擬器或實際的Azure實例中運行,因此嘗試生成跟蹤輸出的第一件事情將會崩潰。 CloudConfigurationManager是一種常見的候選人,因爲它恰巧會產生跟蹤輸出,並且在角色啓動時通常會很早就使用它。但是原則上,任何產生跟蹤輸出的東西都會觸發這種異常。

避免這種情況的一種簡單方法是從配置文件中刪除相關部分。當您創建新的Web角色時,Visual Studio添加一個<system.diagnostics>部分,該部分將默認跟蹤輸出配置爲轉到Azure診斷偵聽器。你可以評論一下。這將使您能夠在不使用計算模擬器的情況下直接在Visual Studio中調試Web角色(假設您沒有執行任何依賴於角色環境的任務)。

當然,問題在於您在Azure中運行時不會再獲取任何診斷跟蹤。解決該問題的一種方法是將相關配置移至Web.config.Release文件(添加必需的xdt:屬性)。

當您使用本地計算模擬器時,此更改還會停止Azure診斷跟蹤偵聽器的運行。 (這不是一個問題,因爲跟蹤消息仍然會出現在調試器中,這意味着您不會像複製到表存儲器那樣獲取持久性的跟蹤副本,就像您在真正運行時一樣)。解決此問題的顯而易見的方法似乎是對Web.config.Debug進行類似的修改(或者在模擬器中運行版本構建),但是有一個障礙:顯然,默認情況下,在打包模擬器時,雲項目不會應用配置文件轉換。幸運的是,您可以修復此問題:http://blog.hill-it.be/2011/03/07/no-web-config-transformation-in-local-azure/顯示如何爲計算模擬器中的本地調試啓用轉換。 (直接在VS調試ASP.NET項目時,順便變換永遠不會應用。)

+0

我在將Azure SDK從v2.0升級到v2.1時遇到此問題。它不會告訴我,它會自動將我的啓動項目從雲項目更改爲Web角色項目。改回它解決了這個問題。 – Bern

0

我發現這個錯誤是由錯誤的版本在你的web.config

即引起。 ,您可能沒有 Version=1.0.0.0

Microsoft.WindowsAzure.Diagnostics高達1.8.0.0版本截至目前

嘗試更新到最新版本

0

除去T他在Web.config中輸入< add type =「Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener