自动伸缩删除webrole时如何取消订阅?

How to unsubscribe from subscription when webrole is deleting by autoscaling?

我的应用使用 Ninject。

public class Global : NinjectHttpApplication

在应用程序启动时,我调用:

protected override void OnApplicationStarted()
...
            if (RoleEnvironment.IsAvailable)
            {
                RoleEnvironment.Stopping += (sender, args) =>
                {
                    messagesListener.Stop(true);
                    Logger.LogInfo("Website is stopping. InstanceNo = " + instanceNo);
                };
        }

但由于某种原因,此事件 Stopping 未被调用。请帮我。我听说我可能需要使用 RoleEntryPoint class 的 OnStop 事件,我可以在我的 class 中继承它,但我不确定该怎么做。我读了这篇文章:What's the difference between the webrole onStart() event and Application_Start() global.asax event?

您的 Web 项目中应该有一个名为 WebRole.cs 的 class。此 class 默认添加到所有基于云服务的基于 Web 的 Azure 项目。

如果您在项目中没有看到 class,您可以简单地添加它。在其中,您可以为停止事件配置事件处理程序

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {
        // For information on handling configuration changes
        // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

        RoleEnvironment.Stopping += (sender, args) =>
            {
                messagesListener.Stop(true);
                Logger.LogInfo("Website is stopping. InstanceNo = " + instanceNo);
            };

        return base.OnStart();
    }

    public override void OnStop()
    {
        // you can also put stuff here to test
        base.OnStop();
    }
}