1

DiagnosticMonitorを使用するためにログを構成しようとしているAzureWebRoleがあります。

windowsazure.comのドキュメントによると、ログはOnStartに実装する必要があります。

Note: The code in the following steps is typically added to the OnStart method of the role.

https://www.windowsazure.com/en-us/develop/net/common-tasks/diagnostics/

OnStartメソッドにアクセスするには、RoleEntryPointを定義する必要があります。しかし、一度定義すると、WebアプリケーションApplication_StartのRoleEnvironmentにアクセスできなくなります。

DiagnosticMonitorを使用しながら、RoleEnvironmentをアプリケーションで使用できるようにするにはどうすればよいですか?

アプリケーションの接続文字列をサービス構成に保存します。

public class WebRole : RoleEntryPoint
    {

        public override bool OnStart()
        {


            // config
            var config = DiagnosticMonitor.GetDefaultInitialConfiguration();

            LocalResource localResource = RoleEnvironment.GetLocalResource("MyCustomLogs");

            DirectoryConfiguration dirConfig = new DirectoryConfiguration();
            dirConfig.Container = "wad-mycustomlogs-container";
            dirConfig.DirectoryQuotaInMB = localResource.MaximumSizeInMegabytes;
            dirConfig.Path = localResource.RootPath;


            DiagnosticMonitorConfiguration diagMonitorConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();
            diagMonitorConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0);
            diagMonitorConfig.Directories.DataSources.Add(dirConfig);

            DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);



            return base.OnStart();
        }
4

2 に答える 2

1

私はそれを解決しました。

ソリューションのクリーニング、再構築、IIS の再起動、Azure エミュレーターのシャットダウン、Visual Studio の再起動後、突然動作し始めました。

コードをまったく変更しませんでした。

(私も投稿する前にこれらすべてを行いましたが、同時にすべてを行った場合にのみ機能しました)

于 2012-03-29T14:52:39.880 に答える
0

これは間違いなく正しいコード例です。Web アプリケーションではなく、ロールでこれらすべてを設定する必要があります。

注: Azure には完全な IIS があるため、RoleEntryPoint On_start と、IIS 内の独自のワーカー プールで実行されている Web アプリケーションの間でコンテキストが異なります。

簡単な健全性チェックリスト:

  • あなたが書いているコードは、RoleEntryPoint から継承するクラスにありますか (通常、WebRole.cs は Global.asax ではありません)。
  • Azure Emulator でプロジェクトを実行しています (うっかり Web プロジェクトを直接開始していませんか?)

Azure エミュレーターでアプリケーションを実行している場合、または Azure 自体にデプロイされている場合、関連する DLL 参照がある限り、IIS アプリケーション内から RoleEnvironment を使用できます。コードで RoleEnvironment.IsAvailable を使用してビルドできる場合は、ライブラリが含まれています。私が考えることができる唯一のことは、Azure エミュレーター内ではなく、Web サイトを直接実行していることです。

Cloud プロジェクトを Visual Studio のスタートアップとして設定すると、ゴールデンになるはずです。

于 2012-03-29T13:41:40.673 に答える