0

Azure ロールを実行しようとしています - エミュレーターで実行されますが、Azure では実行されません。そこで、Tracing をプロジェクトに統合しようとしました。私は最初に単純なテストプロジェクト(完全に機能しました)で試しましたが、「実際の」プロジェクトでは結果が得られません。

ここに私のファイルがあります:

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

ServiceConfiguration.Cloud.cscfg

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2013-03.2.0">
  <Role name="MyRoleName">
    <Instances count="2" />
    <ConfigurationSettings>
      <Setting name="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=<myAccount>;AccountKey=<myKEy==>" />
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=<myAccount>;AccountKey=<myKEy==>" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

serviceDefinition.csdef

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0">
  <WorkerRole name="MyRoleName" vmsize="Small">
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
    <Endpoints>
      <InternalEndpoint name="InternalEndpoint1" protocol="tcp" />
    </Endpoints>
    <ConfigurationSettings>
      <Setting name="StorageConnectionString" />
    </ConfigurationSettings>
  </WorkerRole>
</ServiceDefinition>

私のソースコード(スニペット):

public override bool OnStart()
{

    ConfigDiagnostics();
    Trace.TraceInformation("Initializing storage account");

    // Set the maximum number of concurrent connections 
    ServicePointManager.DefaultConnectionLimit = 12;

    // For information on handling configuration changes
    // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

    return base.OnStart();
}

private void ConfigDiagnostics()
{
    DiagnosticMonitorConfiguration config = DiagnosticMonitor.GetDefaultInitialConfiguration();
    config.ConfigurationChangePollInterval = TimeSpan.FromMinutes(1d);
    config.Logs.BufferQuotaInMB = 500;
    config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
    config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1d);            

    //DiagnosticMonitor.Start(@"StorageConnectionString", config);
    DiagnosticMonitor.Start(@"Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);
}

同じコードがプレーンな新しい Azure プロジェクト内で機能しますが、このプロジェクトでは機能しません。現在確認できる唯一の違いは、「実際の」プロジェクトが run() メソッドで例外をスローすることです。トレース結果 (Trace.WriteLine、Trace.TraceError、または Trace.TraceInformation から) がアップロードされない可能性があります。これは、Azure インスタンスの例外とリサイクルが発生するのが速すぎる/早すぎて、トレース結果をストレージ アカウントにアップロードできないためですか? それとも、私が見逃した別のポイントがあるのでしょうか?!

よろしくお願いします :)

4

1 に答える 1