Wie werden Ausnahmen mit Anforderungen in Application Insights on Azure verknüpft?

Wir verwenden Owin on Azure für einen REST-Service und müssen Application Insights direkt Bericht erstatten. Wir möchten Ausnahmen und Anfragen protokollieren. Im Moment haben wir das:

using AppFunc = Func<IDictionary<string, object>, Task>;
public class InsightsReportMiddleware
{

    readonly AppFunc next;
    readonly TelemetryClient telemetryClient;

    public InsightsReportMiddleware(AppFunc next, TelemetryClient telemetryClient)
    {
        if (next == null)
        {
            throw new ArgumentNullException("next");
        }

        this.telemetryClient = telemetryClient;
        this.next = next;
    }

    public async Task Invoke(IDictionary<string, object> environment)
    {
        var sw = new Stopwatch();
        sw.Start();

        await next(environment);
        sw.Stop();

        var ctx = new OwinContext(environment);
        var rt = new RequestTelemetry(
            name: ctx.Request.Path.ToString(),
            timestamp: DateTimeOffset.Now,
            duration: sw.Elapsed,
            responseCode: ctx.Response.StatusCode.ToString(),
            success: 200 == ctx.Response.StatusCode
            );

        rt.Url = ctx.Request.Uri;
        rt.HttpMethod = ctx.Request.Method;
        telemetryClient.TrackRequest(rt);
    }
}


public class InsightsExceptionLogger : ExceptionLogger
{
    readonly TelemetryClient telemetryClient;

    public InsightsExceptionLogger(TelemetryClient telemetryClient)
    {
        this.telemetryClient = telemetryClient;            
    }

    public override Task LogAsync(ExceptionLoggerContext context, System.Threading.CancellationToken cancellationToken)
    {
        telemetryClient.TrackException(context.Exception);
        return Task.FromResult<object>(null);
    }

    public override void Log(ExceptionLoggerContext context)
    {
        telemetryClient.TrackException(context.Exception);
    }
}

Sie sind für unsere Anwendung wie folgt registriert:

static void ConfigureInsights(IAppBuilder app, HttpConfiguration config)
{
    var rtClient = new TelemetryClient();
    app.Use<InsightsReportMiddleware>(rtClient);
    config.Services.Add(typeof (IExceptionLogger), new InsightsExceptionLogger(rtClient));
}

Dies funktioniert, außer, dass Ausnahmen und Anforderungen nicht verbunden sind. Beide werden protokolliert, aber wenn Sie auf eine fehlgeschlagene Anforderung klicken, wird "Keine verwandten Ausnahmen gefunden" angezeigt. Umgekehrt können wir beim Öffnen einer Ausnahmeeigenschaft "Anforderungen, die von dieser Ausnahme betroffen sind: 0" lesen. Was ist der richtige Weg, um das zu tun?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage