1

我有一个 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();
        }
4

2 回答 2

1

我已经解决了。

在清理我的解决方案、重建、重新启动 IIS、关闭 azure 模拟器并重新启动 Visual Studio 之后,它突然开始工作。

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

(我什至在发布之前也做了所有这些事情,但只有在我同时完成所有这些事情时才有效)

于 2012-03-29T14:52:39.880 回答
0

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

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

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

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

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

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

于 2012-03-29T13:41:40.673 回答