Почему я не могу получить доступ к RoleEnvironment в Application_Start при использовании RoleEntryPoint? - PullRequest
1 голос
/ 29 марта 2012

У меня есть 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.Но как только он определен, я не могу получить доступ к RoleEnvironment в веб-приложениях 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();
        }

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Я решил это.

После очистки моего решения, перестройки, перезапуска IIS, выключения эмуляторов Azure и перезапуска Visual Studio он внезапно начал работать.

Я не изменил код ввсе.

(я даже делал все эти вещи до публикации, но это работало только тогда, когда я делал все одновременно)

0 голосов
/ 29 марта 2012

Это определенно правильный пример кода. Вы должны установить все это в роли, но НЕ в своем веб-приложении.

ПРИМЕЧАНИЕ. Поскольку Azure теперь имеет полный IIS, контекст отличается между RoleEntryPoint On_start и веб-приложением, которое выполняется в собственном рабочем пуле в IIS.

Просто быстрый контрольный список здравомыслия:

  • Код, который вы пишете, находится в вашем классе, который наследуется от RoleEntryPoint (обычно WebRole.cs НЕ в Global.asax)?
  • Вы запускаете проект в эмуляторе Azure (случайно не запускаете веб-проект напрямую?)

Если вы запускаете приложение в эмуляторе Azure или развертываете в самом Azure, RoleEnvironment доступно из приложения IIS, если у вас есть соответствующая ссылка на DLL. Если вы можете построить с помощью RoleEnvironment.IsAvailable в своем коде, то библиотеки включены. Единственное, о чем я могу думать, это то, что вы запускаете веб-сайт напрямую, а не в эмуляторе Azure.

Установите проект Cloud для запуска в Visual Studio, и вы должны быть золотым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...