1

我想知道为什么以下 azure workerrole 在角色关闭时不显示任何诊断消息:

public class WorkerRole : RoleEntryPoint {

private bool running=true;

    public override void Run() {
        while (running)
        {
            Thread.Sleep(10000);
            TTrace.WriteLine("working", "Information");
        }
        Trace.WriteLine("stopped", "Information");
    }

    public override bool OnStart()
    {
        Trace.WriteLine("starting", "Information");
        return base.OnStart();
    }

    public override void OnStop() {
        Trace.WriteLine("stopping", "Information");
        running = false;
        base.OnStop();
    }
}

我可以在诊断日志中看到事件“开始”和“工作”,但 Onstop 方法不记录任何内容。我想知道它是否被调用了,所以我在 OnStop() 方法中注入了一些代码来写出一些数据。事实上,数据是按预期写入的,这证明该方法被调用,只是我没有得到任何日志。任何想法如何跟踪我的关机代码?

4

2 回答 2

4

我的第一个也是最好的猜测是诊断代理没有时间将跟踪传输到存储中供您查看。跟踪首先在 VM 上本地记录,然后代理将根据您的配置方式将它们转移(按需或计划)。虚拟机关闭后,代理也消失了,无法将其转移。

于 2012-10-24T22:22:15.603 回答
1

不支持在 OnStop 中进行跟踪,如果您设法通过按需传输 (http://msdn.microsoft.com/en-us/library/windowsazure/gg433075.aspx) 使其工作,它可能无法在下一个工作发布。请注意,Web Role OnStart 中的跟踪也不起作用。请参阅我的博客文章http://blogs.msdn.com/b/rickandy/archive/2012/12/21/optimal-azure-restarts.aspx来解决这个问题。另请参阅我的博客文章,了解有关使用 DbgView 查看实时 OnStop 跟踪数据的说明。

OnStop 方法应该只用于延迟关闭,直到你清理干净——所以你不应该有太多的代码可以跟踪。再次,请参阅我的博客了解详细信息。

于 2012-12-06T20:21:30.263 回答