2012-03-29 31 views
1

我有一个Azure WebRole,我正尝试使用DiagnosticMonitor配置日志记录。为什么在使用RoleEntryPoint时无法访问Application_Start中的RoleEnvironment?

根据在windowsazure.com测井应的OnStart来实现的文档:

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/

为了访问OnStart方法我必须定义一个RoleEntryPoint。但一旦定义,我就无法访问Web应用程序Application_Start中的RoleEnvironment。

如何使角色环境可用于应用程序,同时仍能够使用DiagnosticMonitor?

我将应用程序连接字符串存储在服务配置中。

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

什么,当你试图在Web应用程序的Application_Start访问RoleEnvironment发生什么呢? – 2012-03-29 12:47:41

+0

这似乎与这个http://stackoverflow.com/a/6202411/348841有什么关系,但有人可以解释我应该怎么做? – 2012-03-29 12:49:39

+0

您是否试图从Application_Start(重新)配置您的DiagnosticsMonitor? – 2012-03-29 12:49:53

回答

1

我解决了它。

清洗我的解决方案,重建,重新启动IIS,关停蔚蓝的仿真器并重新启动Visual Studio中后,它突然开始工作。

我根本没有更改任何代码。

(我甚至做所有这些事情发布以及之前但是当我做这一切在同一时间它只是工作)

0

这是defintely正确的示例代码集。您需要将所有这些设置在角色中,而不是在您的Web应用程序中。

注:由于Azure的现在有完整的IIS的上下文是RoleEntryPoint On_start和Web应用程序,它在它自己的工作池IIS中运行的不同。

只是一个快速的理智清单:

  • 你写的代码是在你的类,它从RoleEntryPoint继承(通常WebRole.cs不是在Global.asax)?
  • 你正在运行在Azure的模拟器项目(不小心直接启动Web项目?)

如果你正在运行在Azure的模拟器应用程序或部署到Azure的本身RoleEnvironment可从内你的IIS应用程序,只要你有相关的DLL参考。如果您可以在您的代码中使用RoleEnvironment.IsAvailable构建,则包含这些库。我唯一能想到的就是你直接运行网站,而不是在Azure模拟器中运行。

将Cloud项目设置为Visual Studio中的启动项,您应该是金手指。

+0

对于这两个问题都可以。类WebRole继承了RoleEntryPoint,我正在使用模拟器。如果我只从我的项目中排除WebRole.cs,我可以再次从应用程序访问RoleEnvironment。 – 2012-03-29 13:46:55

相关问题