在WCFService WebRole中使用Windows Azure表存储时,尝试通过以下方式创建CloudStorageAccount:
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信任级别选项更改为完全信任)。
全部完成,但我仍然有相同的例外。
答案 0 :(得分:20)
可能导致此错误的一件事是运行Web角色本身,而不是运行包含云项目。如果这是问题,您可以通过确保将云项目设置为调试的启动项目而不是Web角色来修复它。
运行定义Web角色的ASP.NET项目是可能的,有时也很有用。这比在Azure Compute Emulator中运行要快得多。它还可以使您开发项目而无需运行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项目时,从不应用转换。)
答案 1 :(得分:0)
我发现此错误是由web.config
中的错误版本引起的 是的,你可能没有Version=1.0.0.0
Microsoft.WindowsAzure.Diagnostics
目前已达到版本1.8.0.0
尝试更新到当前版本
答案 2 :(得分:0)
删除Web.config中的行&lt; add type =“Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener