1

次のコードのAzureWebRoleがあります。

public override bool OnStart()
{
    setDiagnostics();

    TestClass test = new TestClass();

    return base.OnStart(); 
}

private void setDiagnostics()
{
    string wadConnectionString = "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString";
    CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue(wadConnectionString));

    DeploymentDiagnosticManager deploymentDiagnosticManager = new DeploymentDiagnosticManager(cloudStorageAccount, RoleEnvironment.DeploymentId);
    RoleInstanceDiagnosticManager roleInstanceDiagnosticManager = cloudStorageAccount.CreateRoleInstanceDiagnosticManager(
        RoleEnvironment.DeploymentId,
        RoleEnvironment.CurrentRoleInstance.Role.Name,
        RoleEnvironment.CurrentRoleInstance.Id);

    DiagnosticMonitorConfiguration diagConfig = roleInstanceDiagnosticManager.GetCurrentConfiguration();

    if (diagConfig == null)
        diagConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();

    diagConfig.WindowsEventLog.DataSources.Add("Application!*");
    diagConfig.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromMinutes(1D);

    roleInstanceDiagnosticManager.SetCurrentConfiguration(diagConfig);

    DiagnosticMonitor.Start(wadConnectionString, diagConfig);
}

myのコンストラクターにTestClassは、次のコードがあります。

EventLog.WriteEntry("TestClass", "Before the try", EventLogEntryType.Information);
try
{
    EventLog.WriteEntry("TestClass", "In the try", EventLogEntryType.Information);
    Int32.Parse("abc");
}
catch (Exception ex)
{
    EventLog.WriteEntry("TestClass", ex.Message, EventLogEntryType.Error);
}

OnStart何らかの理由で、このコードは、メソッドにブレークポイントを設定してデバッグモードで実行し、。を使用してコードを実行するとうまく機能しF11ます。ただし、すべてのブレークポイントを削除して実行しただけでは、 WADWindowsEventLogsTableにEventLogエントリが表示されません。だから、これは私にはタイミングの問題のように思えます...私のコードがこの動作を実行している理由を誰かが知っていますか?

前もって感謝します!

4

4 に答える 4

2

問題はEventLog.WriteEntry()方法でした。ソース「TestClass」を EventLog ソースとして使用しました。ただし、スタートアップ タスクを使用してこのソースを作成したことはなく、権限が不十分なため、エントリをログに記録できませんでした。

したがって、解決策: スタートアップ タスクで独自のソースを作成するか、トレース メッセージを使用します。

于 2012-06-06T10:31:56.470 に答える
0

TestClass作品を からRoleEntryPoint.OnStart()に移動してみてくださいRoleEntryPoint.Run()

public override void Run() {
  TestClass test = new TestClass();
  base.Run();
}
于 2012-05-24T20:12:08.130 に答える
0
  1. アプリケーションを 1 分以上実行し続ける必要があります。
  2. 次の設定がオフになっていることを確認する必要があります (これにより、ログが予想とは異なる場所に記録される可能性があります。詳細については、http: //michaelcollier.wordpress.com/2012/04/を参照してください)。 02/where-is-my-windows-azure-diagnostics-data/ ):

ここに画像の説明を入力

于 2012-05-25T10:37:44.260 に答える
0

ロールが Azure にデプロイされると、ロールは実際に開始されますか?それとも初期化中とビジーの間を循環するだけですか?

もしそうなら、問題は時間の問題です。アイテムは、インスタンスから Azure Storage に一定時間ごとに転送されます。

diagConfig.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromMinutes(1D);

そのタイマーに到達する前にインスタンスが再起動すると、テーブルには何も転送されません。

于 2012-05-24T21:01:33.360 に答える