2012-03-29 3 views
1

Ich habe eine Azure WebRole, die ich versuche, die Protokollierung für die Verwendung des DiagnosticMonitor zu konfigurieren.Warum kann ich nicht auf die RoleEnvironment in Application_Start zugreifen, wenn Sie einen RoleEntryPoint verwenden?

Gemäß der Dokumentation bei windowsazure.com sollte die Protokollierung in OnStart implementiert werden:

Note: The code in the following steps is typically added to the OnStart method of the role. 

https://www.windowsazure.com/en-us/develop/net/common-tasks/diagnostics/

Um die OnStart Methode zuzugreifen Ich habe einen RoleEntryPoint zu definieren. Aber sobald es definiert ist, kann ich nicht auf die RoleEnvironment in Web-Anwendungen Application_Start zugreifen.

Wie kann ich die RoleEnvironment für die Anwendung verfügbar machen und trotzdem den DiagnosticMonitor verwenden?

Ich speichern die Anwendungen Verbindungszeichenfolgen in der Dienstkonfiguration.

public class WebRole : RoleEntryPoint 
    { 

     public override bool OnStart() 
     { 


      // config 
      var config = DiagnosticMonitor.GetDefaultInitialConfiguration(); 

      LocalResource localResource = RoleEnvironment.GetLocalResource("MyCustomLogs"); 

      DirectoryConfiguration dirConfig = new DirectoryConfiguration(); 
      dirConfig.Container = "wad-mycustomlogs-container"; 
      dirConfig.DirectoryQuotaInMB = localResource.MaximumSizeInMegabytes; 
      dirConfig.Path = localResource.RootPath; 


      DiagnosticMonitorConfiguration diagMonitorConfig = DiagnosticMonitor.GetDefaultInitialConfiguration(); 
      diagMonitorConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0); 
      diagMonitorConfig.Directories.DataSources.Add(dirConfig); 

      DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config); 



      return base.OnStart(); 
     } 
+0

Was passiert, wenn Sie versuchen, die RoleEnvironment in Application_Start Webanwendungen zugreifen? –

+0

Es scheint etwas damit zu tun zu haben http://stackoverflow.com/a/6202411/348841 aber kann mir bitte jemand erklären wie ich das machen soll? –

+0

Versuchen Sie, Ihren DiagnosticsMonitor von Application_Start (neu) zu konfigurieren? –

Antwort

1

Ich habe es gelöst.

Nachdem ich meine Lösung bereinigt, neu aufgebaut, IIS neu gestartet, die azurblauen Emulatoren heruntergefahren und Visual Studio neu gestartet hatte, funktionierte es plötzlich.

Ich änderte überhaupt keinen Code.

(ich selbst habe all diese Dinge vor als auch veröffentlichen, aber es funktionierte nur, wenn ich es tat, alle zur gleichen Zeit)

0

Dies ist definitiv der richtige Beispielsatz von Code. Sie müssen dies alles in der Rolle einstellen, jedoch NICHT in Ihrer Webanwendung.

HINWEIS: Da Azure jetzt über vollständige IIS verfügt, unterscheidet sich der Kontext zwischen RoleEntryPoint On_start und der Webanwendung, die in einem eigenen Worker-Pool in IIS ausgeführt wird.

Nur eine schnelle geistige Gesundheit Checkliste:

  • Der Code, den Sie schreiben sind in der Klasse ist, die von RoleEntryPoint erbt (typischerweise WebRole.cs NICHT in der Global.asax)?
  • Sie das Projekt in dem Azure-Emulator läuft (nicht versehentlich ein Webprojekt direkt starten?)

Wenn Sie die Anwendung in dem Azure-Emulator oder eingesetzt Azure selbst RoleEnvironment läufst ist von innen verfügbar Ihre IIS-Anwendung, solange Sie die relevante DLLs-Referenz haben. Wenn Sie mit RoleEnvironment.IsAvailable in Ihrem Code erstellen können, sind die Bibliotheken enthalten. Das einzige, was ich denken kann, ist, dass Sie die Website direkt und nicht im Azure-Emulator ausführen.

Legen Sie das Cloud-Projekt als Ihr Startup in Visual Studio fest und Sie sollten golden sein.

+0

Ja auf beiden Fragen. Klasse WebRole erbt RoleEntryPoint und ich verwende den Emulator. Wenn ich die WebRole.cs nur aus meinem Projekt ausschließe, kann ich von der Anwendung aus erneut auf die RoleEnvironment zugreifen. –

Verwandte Themen