为什么可以';使用RoleEntryPoint时访问Application_Start中的RoleEnvironm

本文关键字:Application 访问 Start RoleEnvironm 中的 RoleEntryPoint 使用 为什么 | 更新日期: 2023-09-27 18:29:28

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

为什么可以';使用RoleEntryPoint时访问Application_Start中的RoleEnvironm

我已经解决了。

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

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

(我甚至在发布之前也做了所有这些事情,但只有当我同时做了所有事情时,它才起作用)

这无疑是一组正确的代码示例。你需要在角色中设置所有这些,尽管不在你的web应用程序中。

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

只是一个快速的理智检查表:

  • 您正在编写的代码在从RoleEntryPoint继承的类中(通常WebRole.cs不在Global.asax中)
  • 您正在Azure Emulator中运行该项目(不是无意中直接启动了web项目吗?)

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

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