Облачная служба Azure: событие RoleEnvironment.StatusCheck не запускается

Я поддерживаю устаревшее приложение облачных служб, размещенное в Azure, для .net 4.6.1. Внутри метода Application_Start Global.asax в веб-роли мы регистрируем обработчик событий для RoleEnvironment.StatusCheck, однако наши журналы демонстрируют, что обратный вызов этого события никогда не вызывается и не запускается.

Согласно этому блогу: https://convective.wordpress.com/2010/03/18/service-runtime-in-windows-azure/ мы ожидали, что это событие будет запускаться каждые 15 секунд, и мы считаем, что это происходило, однако с тех пор прекратилось. Мы ожидаем, что он перестал работать примерно в то время, когда мы установили в решение несколько новых библиотек DLL (некоторые из этих библиотек включают в себя: Microsoft.Rest.ClientRuntime.dll, Microsoft.Azure.Storage.Common.dll, Microsoft.Azure.Storage.Blob. dll, Microsoft.Azure.KeyVault.dll)

Мы пытались подключиться к виртуальной машине по протоколу RDP, чтобы проверить журналы событий, но ничего очевидного там нет. Любые предложения о том, где мы можем искать подсказки?


person Kelvin    schedule 05.01.2021    source источник


Ответы (1)


Кажется, ваш обработчик событий не зарегистрирован. Попробуйте ниже код с другим подходом:

public class WorkerRole : RoleEntryPoint
{
    public override bool OnStart()
    {
        RoleEnvironment.StatusCheck += RoleEnvironmentStatusCheck;
        return base.OnStart();
    }

    // Use the busy object to indicate that the status of the role instance must be Busy
    private volatile bool busy = true;

    private void RoleEnvironmentStatusCheck(object sender, RoleInstanceStatusCheckEventArgs e)
    {
        if (this.busy)
        {
            // Sets the status of the role instance to Busy for a short interval.
            // If you want the role instance to remain busy, add code to
            // continue to call the SetBusy method
            e.SetBusy();
        }
    }

    public override void Run()
    {
        Trace.TraceInformation("Worker entry point called", "Information");

        while (true)
        {
            Thread.Sleep(10000);
        }
    }

    public override void OnStop()
    {
        base.OnStop();
    }
}
person singhh-msft    schedule 06.01.2021
comment
Вам это помогает? - person singhh-msft; 08.01.2021
comment
Да, регистрация этого обработчика событий в классе WebRole, кажется, решила проблему для нас. Есть идеи, почему раньше это могло работать в классе Global.asax.cs? - person Kelvin; 19.01.2021