使用WebGet Web服务进行Azure日志记录

时间:2011-02-16 17:04:22

标签: azure

我有一个现有的WCF Web服务,它在一个.cs文件中包含三个WebGet处理程序。这些处理程序适当调用其他.cs文件来处理操作。

现在,我通过创建Azure项目并添加现有解决方案,基于此Web服务创建了一个Azure项目。现在,我想使用Trace.WriteLine进行日志记录。我设置.cscfg,.csdef和Web.config文件以允许记录到Azure存储。

但是,我不知道在哪里设置以下信息:

//Get the default configuration
DiagnosticMonitorConfiguration dmc = DiagnosticMonitor.GetDefaultInitialConfiguration();

//Set the schedule to transfer logs every 10 mins to the storage                
dmc.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(10);

//Start Diagnostics Monitor with the storage account configuration
DiagnosticMonitor.Start("DiagnosticsConnectionString",dmc);

我尝试将它放在一个包含logger方法的单独的内部静态类中,但是当我运行Web服务时出现RoleEnvironmentException:error。

由于我的Web服务类中没有带有三个WebGets的OnStart()方法,我在哪里确保我已正确启动诊断监视器,以便我可以使用Trace.WriteLine?< / p>

3 个答案:

答案 0 :(得分:2)

此配置代码并不特别需要在运行代码的每个类上设置,只需在Web角色启动时运行一次即可。通常的地方是RoleEntryPoint。因为您创建了此项目,然后将其添加到您的云项目中,所以您不会使用RoleEntryPoint方法来覆盖OnStart()方法。但这并不意味着你不能拥有一个。

您有两种选择;

  1. 只需在您的网站项目中添加一个新类,该类继承自Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint并覆盖OnStart()以设置您的诊断(这将是我的首选选项)
  2. 将相同的代码放在代码中的其他位置,以便它只在global.asax中运行一次Application_Start

答案 1 :(得分:1)

答案 2 :(得分:1)

对未来观众的后期跟进......在我的情况下,我在&gt;中启用了诊断功能角色&gt; 。所以当我将DiagnosticMonitor.Start添加到Global.aspx&gt; Application_Start它基本上再次启动。由于我想自定义配置,我只是在角色的配置中禁用了内置诊断功能。