2016-01-10 13 views
9

Possiedo un sito Web ASPC di MVC e sto implementando Application Insights. In questo momento, mi collego a Trace evento come segue:Utilizzo dell'istanza statica di TelemetryClient con Application Insights

private static TelemetryClient _APM; 
private static TelemetryClient APM 
{ 
    get 
    { 
     if (_APM == null) { _APM = new TelemetryClient(); } 
     return _APM; 
    } 
} 

public static void Trace(string Message) 
{ 
    APM.TrackTrace(Message); 
} 

Come si può vedere, questo sarebbe mantenere una singola istanza statica del TelemetryClient per tutte le tracce. È così che dovremmo usare il cliente? O dovremmo creare una nuova istanza di TelemetryClient per ogni registro?

risposta

7

Secondo the docs è necessario:

... utilizzare un'istanza di TelemetryClient per ogni modulo della vostra applicazione. Ad esempio, è possibile che nel servizio Web sia presente un solo TelemetryClient per segnalare le richieste HTTP in entrata e un altro in una classe middleware per segnalare eventi di logica aziendale.

Probabilmente è costoso creare un nuovo client di telemetria per ogni registro, quindi, in base alla struttura della tua applicazione, probabilmente hai ragione di utilizzare il modello singleton che hai descritto nel tuo post.

+0

Perfetto! Questo è esattamente quello che stavo cercando! – William

+11

è possibile farlo, tuttavia per un'app server o ASP.Net si potrebbe ** non ** voler utilizzare un 'TelemetryClient' statico. se si utilizza un singleton statico, alcuni dei campi di contesto registrati con telemetria (utente, sessione, operazione) verranno impostati una sola volta, in primo piano. L'utilizzo di un nuovo client di telemetria (erediteremo) erediterà utente/sessione/ecc dalla pipeline asp.net, che può aiutare a diagnosticare cosa sta succedendo quando si guarda la traccia. nel portale, sarete in grado di vedere tutta la telemetria nella stessa sessione in cui si è verificata la traccia. o quale richiesta di asp.net ha causato la traccia. –