无法创建Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener

问题描述:

虽然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信任级别选项更改为完全信任)。

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

可能导致此错误的一件事是运行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

我发现这个错误是由错误的版本在你的web.config

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

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

尝试更新到最新版本

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