1

次の紺碧の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にローカルで記録され、次にエージェントは、構成方法に応じてトレースを転送します(オンデマンドまたはスケジュール済み)。VMがシャットダウンすると、エージェントも停止し、転送できなくなります。

于 2012-10-24T22:22:15.603 に答える
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メソッドは、クリーンアップするまでシャットダウンを遅らせるためにのみ使用する必要があります。そのため、トレースするコードをあまり含まないようにする必要があります。繰り返しになりますが、詳細については私のブログを参照してください。

于 2012-12-06T20:21:30.263 に答える