Диагностика Azure для нескольких проблем AppDomain

Я столкнулся со следующей проблемой с Azure Diagnostic Monitor: когда я создаю новый AppDomain в событии OnStart() в точке входа WorkerRole, диагностика работает только в родительском AppDomain. Я пробовал инициализировать Diagnostics Monitor в дочернем AppDomain, но это не помогает. (Трассы собираются только с родительского домена)

Пример кода воспроизведения:

public class WorkerRole : RoleEntryPoint
{
    public override void Run()
    {
        // This is a sample worker implementation. Replace with your logic.
        InitializeDiagnostics();
        Trace.TraceInformation("WorkerRole1 entry point called", "Information");

        while (true)
        {
            Thread.Sleep(10000);
            Trace.TraceInformation("Parent domain working", "Information");
        }
    }

    public override bool OnStart()
    {
        // Set the maximum number of concurrent connections 
        ServicePointManager.DefaultConnectionLimit = 12;
        InitializeDiagnostics();

        var setup = new AppDomainSetup();
        setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
        setup.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
        var newDomain = System.AppDomain.CreateDomain("NewApplicationDomain",null, setup);
        foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies().Where(x => !x.GlobalAssemblyCache))
        {
            newDomain.Load(assembly.GetName());
        }
        newDomain.Load(typeof (Worker).Assembly.FullName);
        var worker =  newDomain.CreateInstanceAndUnwrap(this.GetType().Assembly.FullName, typeof (Worker).FullName) as Worker;
        worker.DoWork();


        return base.OnStart();
    }

    public void InitializeDiagnostics()
    {
        var roleInstanceDiagnosticManager = new RoleInstanceDiagnosticManager(RoleEnvironment.GetConfigurationSettingValue("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"),
                                                                              RoleEnvironment.DeploymentId,
                                                                              RoleEnvironment.CurrentRoleInstance
                                                                                            .Role.Name,
                                                                              RoleEnvironment.CurrentRoleInstance.Id);
        var dmc = roleInstanceDiagnosticManager.GetCurrentConfiguration();

        var dictionaryConfiguration = new DirectoryConfiguration();
        DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", dmc);
    }
}

public class Worker : MarshalByRefObject
{
    public void DoWork()
    {


        new Task(() =>
            {
                while (true)
                {
                    Thread.Sleep(1000);
                    Trace.TraceInformation(AppDomain.CurrentDomain.FriendlyName + " Worker working...", "Information");
                }

            }).Start();
    }
}

}

Конфигурация приложения:

<?xml version="1.0" encoding="utf-8" ?>
  <configuration>
   <system.diagnostics>
    <trace>
           <listeners>
            <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                name="AzureDiagnostics">
                <filter type="" />
            </add>
           </listeners>
       </trace>
   </system.diagnostics>
</configuration>

Ожидаемый результат: много зарегистрированных сообщений: "{Domain Name} Worker work..." Некоторые "Родительский домен работает"

Фактический вывод: «Родительский домен работает»

Я использую Azure SDK 2.0. Кто-нибудь из вас сталкивался с подобной проблемой?


person Grzegorz Banczak    schedule 22.07.2014    source источник


Ответы (1)


Хорошо, наконец решил это. Обновление Azure SDK до версии 2.3 помогло... Интересно, что сообщения по-прежнему не отображаются в консоли эмулятора вычислений, но после обновления они корректно регистрируются в таблице WADLog.

person Grzegorz Banczak    schedule 26.07.2014