我有一个现有的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>
答案 0 :(得分:2)
此配置代码并不特别需要在运行代码的每个类上设置,只需在Web角色启动时运行一次即可。通常的地方是RoleEntryPoint
。因为您创建了此项目,然后将其添加到您的云项目中,所以您不会使用RoleEntryPoint
方法来覆盖OnStart()
方法。但这并不意味着你不能拥有一个。
您有两种选择;
Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint
并覆盖OnStart()
以设置您的诊断(这将是我的首选选项)Application_Start
答案 1 :(得分:1)
尝试:
尝试在WCF中找到BeginRequest的等效项。
答案 2 :(得分:1)
对未来观众的后期跟进......在我的情况下,我在&gt;中启用了诊断功能角色&gt; 。所以当我将DiagnosticMonitor.Start添加到Global.aspx&gt; Application_Start它基本上再次启动。由于我想自定义配置,我只是在角色的配置中禁用了内置诊断功能。