为什么我在使用RoleEntryPoint时无法访问Application_Start中的RoleEnvironment?

时间:2012-03-29 12:24:34

标签: c# azure azure-diagnostics

我有一个Azure WebRole,我正在尝试使用DiagnosticMonitor配置日志记录。

根据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的同时使RoleEnvironment可用于应用程序?

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

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();
        }

2 个答案:

答案 0 :(得分:1)

我已经解决了。

清理完解决方案后,重建,重新启动IIS,关闭azure仿真器并重新启动Visual Studio,它突然开始工作。

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

(我甚至在张贴之前做了所有这些事情,但只有在我同时完成所有事情时才有效)

答案 1 :(得分:0)

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

注意:由于Azure现在具有完整的IIS,因此RoleEntryPoint On_start与Web应用程序之间的上下文不同,后者在IIS中的自己的工作池中运行。

快速健全检查清单:

  • 您正在编写的代码是在您的类中继承自RoleEntryPoint(通常不是Global.asax中的WebRole.cs)?
  • 您是在Azure模拟器中运行项目(不是无意中直接启动了Web项目?)

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

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