2011-02-16 54 views
0

我有一個現有的WCF Web服務,其中一個.cs文件中包含三個WebGet處理程序。這些處理程序會對其他.cs文件進行適當的調用以處理該操作。使用WebGet Web服務進行Azure日誌記錄

現在,我通過創建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); 

我試圖將其放置在一個包含記錄方法的獨立的內部靜態類,但我得到一個RoleEnvironmentException:錯誤時我運行網絡服務。

因爲我的Web服務類中沒有帶三個WebGets的OnStart()方法,在哪裏可以確保我的診斷監視器正確啓動,以便可以使用Trace.WriteLine?

回答

2

此配置代碼並不是特別需要在運行代碼的每個類上設置,只需在您的web角色啓動時運行一次即可。通常的做法是在RoleEntryPoint。由於您創建了此項目並將其添加到了您的雲項目中,因此您將不會有RoleEntryPoint以及可以覆蓋的OnStart()方法。但這並不意味着你不能擁有一個。

你有兩個選擇;

  1. 只是一個新的類添加到從Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint繼承Web項目,並覆蓋OnStart()設置你的診斷(這將是我的首選)
  2. 將相同的代碼別的地方在你的代碼,使得它只運行一次像在Global.asax
1

對未來觀衆的後續跟蹤...在我的情況下,我啓用了診斷>角色>。因此,當我將DiagnosticMonitor.Start添加到Global.aspx> Application_Start時,它基本上再次啓動。由於我想自定義配置,我只是在角色的配置中禁用了內置的診斷功能。