我想知道为什么以下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()方法中注入了一些代码来写出一些数据。事实上,数据是按预期编写的,这证明该方法被调用,只是我没有得到任何日志。任何想法如何跟踪我的关机代码?
答案 0 :(得分:4)
我的第一个也是最好的猜测是,诊断代理没有时间将跟踪转移到存储中供您查看。首先在VM上本地记录跟踪,然后代理将根据您的配置将其传输(OnDemand或Scheduled)。 VM关闭后,代理也会消失,无法将其转移。
答案 1 :(得分:1)
不支持在OnStop中进行跟踪,如果您设法通过On-Demand Transfer(http://msdn.microsoft.com/en-us/library/windowsazure/gg433075.aspx)使其工作,则可能无法正常工作在下一个版本中。请注意,Web角色OnStart中的跟踪也不起作用。请参阅我的博文http://blogs.msdn.com/b/rickandy/archive/2012/12/21/optimal-azure-restarts.aspx以解决此问题。另请参阅我的博客文章,了解有关使用DbgView查看实时OnStop跟踪数据的说明。
OnStop方法应该只用于延迟关闭,直到你清理完为止 - 所以你不应该有很多代码要跟踪。再次,请参阅我的博客了解详情。