Diagnostiquez les exceptions dans vos applications web avec Application InsightsDiagnose exceptions in your web apps with Application Insights

Les exceptions dans votre application web dynamique sont signalées par Application Insights.Exceptions in your live web app are reported by Application Insights. Vous pouvez associer les demandes ayant échoué à des exceptions et à d’autres événements sur le client et le serveur, ce qui vous permet de diagnostiquer rapidement les causes.You can correlate failed requests with exceptions and other events at both the client and server, so that you can quickly diagnose the causes.

Configurer les rapports d’exceptionsSet up exception reporting

Diagnostic des exceptions à l’aide de Visual StudioDiagnosing exceptions using Visual Studio

Ouvrez la solution d’application dans Visual Studio pour faciliter le débogage.Open the app solution in Visual Studio to help with debugging.

Exécutez l’application sur votre serveur ou sur votre ordinateur de développement à l’aide de la touche F5.Run the app, either on your server or on your development machine by using F5.

Ouvrez la fenêtre de recherche d’Application Insights dans Visual Studio et configurez-la pour afficher les événements depuis votre application.Open the Application Insights Search window in Visual Studio, and set it to display events from your app. En cours de débogage, il vous suffit de cliquer sur le bouton Application Insights pour effectuer ce paramétrage.While you're debugging, you can do this just by clicking the Application Insights button.

Cliquez avec le bouton droit sur le projet et sélectionnez Application Insights, Ouvrir.

Notez que vous pouvez filtrer le rapport pour qu’il affiche uniquement les exceptions.Notice that you can filter the report to show just exceptions.

Aucune exception ne s’affiche ? Consultez Capture des exceptionsNo exceptions showing? See Capture exceptions.

Cliquez sur un rapport d’exception pour afficher sa trace de pile.Click an exception report to show its stack trace. Cliquez sur une référence de ligne dans l’arborescence des appels de procédure pour ouvrir le fichier de code approprié.Click a line reference in the stack trace, to open the relevant code file.

Dans le code, notez que CodeLens affiche les données sur les exceptions :In the code, notice that CodeLens shows data about the exceptions:

Notification CodeLens des exceptions.

Diagnostic des défaillances à l’aide du portail AzureDiagnosing failures using the Azure portal

Application Insights est fourni avec une expérience APM organisée pour vous aider à diagnostiquer les échecs dans les applications surveillées.Application Insights comes with a curated APM experience to help you diagnose failures in your monitored applications. Pour démarrer, cliquez sur l’option Échecs dans le menu de ressource Application Insights situé dans la section Examiner.To start, click on the Failures option in the Application Insights resource menu located in the Investigate section. Une vue en plein écran apparaît et vous indique les tendances du taux d’échec pour vos demandes, le nombre d'entre elles qui échouent et le nombre d’utilisateurs qui en sont affectés.You should see a full-screen view that shows you the failure rate trends for your requests, how many of them are failing, and how many users are impacted. Sur la droite s’affichent certaines des distributions les plus utiles pour l’opération défaillante sélectionnée, avec les trois premiers codes de réponse, les trois premiers types d’exception et les trois premiers types de dépendances défaillantes.On the right, you'll see some of the most useful distributions specific to the selected failing operation, including top three response codes, top three exception types, and top three failing dependency types.

Vue de triage des échecs (onglet des opérations)

Vous pouvez consulter en un seul clic des exemples représentatifs pour chacun de ces sous-ensembles d’opérations.In a single click, you can then review representative samples for each of these subsets of operations. En particulier, pour diagnostiquer les exceptions, vous pouvez cliquer sur le nombre d’exceptions pour une exception spécifique à présenter dans l’onglet Détails de la transaction de bout en bout, comme indiqué ci-dessous :In particular, to diagnose exceptions, you can click on the count of a particular exception to be presented with the End-to-end transaction details tab, such as this one:

Onglet Détails de la transaction de bout en bout

Sinon, au lieu de rechercher les exceptions relatives à une opération défaillante spécifique, vous pouvez partir de la vue d’ensemble des exceptions, en basculant vers l’onglet Exceptions en haut.Alternatively, instead of looking at exceptions of a specific failing operation, you can start from the overall view of exceptions, by switching to the Exceptions tab at the top. Sur cette page, vous pouvez voir toutes les exceptions collectées pour votre application analysée.Here you can see all the exceptions collected for your monitored app.

Aucune exception ne s’affiche ? Consultez Capture des exceptionsNo exceptions showing? See Capture exceptions.

Suivi personnalisé et données du journalCustom tracing and log data

Pour obtenir des données de diagnostic propres à votre application, vous pouvez insérer le code pour envoyer vos propres données de télémétrie.To get diagnostic data specific to your app, you can insert code to send your own telemetry data. Ces informations apparaissent dans Recherche de diagnostic avec la requête, une vue de la page et d’autres données automatiquement collectées.This displayed in diagnostic search alongside the request, page view, and other automatically collected data.

Vous disposez de plusieurs options :You have several options:

  • TrackEvent() sert généralement à surveiller les modèles d’utilisation, mais les données qu’il envoie apparaissent également sous Evénements personnalisés dans Recherche de diagnostic.TrackEvent() is typically used for monitoring usage patterns, but the data it sends also appears under Custom Events in diagnostic search. Les événements sont nommés et peuvent contenir des propriétés de type chaîne et des métriques numériques sur lesquels vous pouvez filtrer vos recherches de diagnostic.Events are named, and can carry string properties and numeric metrics on which you can filter your diagnostic searches.
  • TrackTrace() vous permet d’envoyer des données plus longues telles que des informations POST.TrackTrace() lets you send longer data such as POST information.
  • TrackException() envoie des arborescences des appels de procédure.TrackException() sends stack traces. Plus d’informations sur les exceptions.More about exceptions.
  • Si vous utilisez déjà un framework de journalisation comme Log4Net ou NLog, vous pouvez capturer ces journaux d’activité et les visualiser dans Recherche de diagnostic avec les données sur les demandes et les exceptions.If you already use a logging framework like Log4Net or NLog, you can capture those logs and see them in diagnostic search alongside request and exception data.

Pour voir ces événements, ouvrez Recherche dans le menu de gauche, sélectionnez le menu déroulant Types d’événements, puis choisissez événement personnalisé, trace ou exception.To see these events, open Search from the left menu, select the drop-down menu Event types, and then choose Custom Event, Trace, or Exception.

Extraire

Notes

Si votre application génère un volume important de télémétrie, le module d'échantillonnage adaptatif réduit automatiquement le volume qui est envoyé vers le portail en envoyant uniquement une fraction représentative des événements.If your app generates a lot of telemetry, the adaptive sampling module will automatically reduce the volume that is sent to the portal by sending only a representative fraction of events. Les événements qui font partie de la même opération seront activés ou désactivés en tant que groupe, afin que vous puissiez naviguer entre les événements connexes.Events that are part of the same operation will be selected or deselected as a group, so that you can navigate between related events. En savoir plus sur l'échantillonnage.Learn about sampling.

Affichage des données POST de la demandeHow to see request POST data

Les détails de la demande n'incluent pas les données envoyées à votre application dans un appel POST.Request details don't include the data sent to your app in a POST call. Pour que ces données soient signalées :To have this data reported:

  • Installez le SDK dans votre projet d’application.Install the SDK in your application project.
  • Insérez du code dans votre application pour appeler Microsoft.ApplicationInsights.TrackTrace().Insert code in your application to call Microsoft.ApplicationInsights.TrackTrace(). Envoyez les données POST dans le paramètre du message.Send the POST data in the message parameter. Il existe une limite à la taille autorisée. Vous pouvez donc essayer d'envoyer uniquement les données essentielles.There is a limit to the permitted size, so you should try to send just the essential data.
  • Lorsque vous examinez une demande ayant échoué, recherchez les traces associées.When you investigate a failed request, find the associated traces.

Capture des exceptions et des données de diagnostic connexesCapturing exceptions and related diagnostic data

Dans un premier temps, vous ne verrez pas dans le portail toutes les exceptions qui entraînent des défaillances dans votre application.At first, you won't see in the portal all the exceptions that cause failures in your app. Vous verrez les exceptions du navigateur (si vous utilisez le SDK JavaScript dans vos pages web).You'll see any browser exceptions (if you're using the JavaScript SDK in your web pages). Mais la plupart des exceptions de serveur sont interceptées par IIS et vous devez écrire un peu de code afin de les afficher.But most server exceptions are caught by IIS and you have to write a bit of code to see them.

Vous pouvez :You can:

  • Enregistrer explicitement des exceptions en insérant le code dans les gestionnaires d'exceptions pour signaler ces exceptions.Log exceptions explicitly by inserting code in exception handlers to report the exceptions.
  • Capturer automatiquement des exceptions en configurant votre infrastructure ASP.NET.Capture exceptions automatically by configuring your ASP.NET framework. Les ajouts nécessaires sont différents selon les différents types d’infrastructure.The necessary additions are different for different types of framework.

Signalisation explicite des exceptionsReporting exceptions explicitly

La façon la plus simple consiste à insérer un appel à TrackException() dans un gestionnaire d'exceptions.The simplest way is to insert a call to TrackException() in an exception handler.

    try
    { ...
    }
    catch (ex)
    {
      appInsights.trackException(ex, "handler loc",
        {Game: currentGame.Name,
         State: currentGame.State.ToString()});
    }
    var telemetry = new TelemetryClient();
    ...
    try
    { ...
    }
    catch (Exception ex)
    {
       // Set up some properties:
       var properties = new Dictionary <string, string>
         {{"Game", currentGame.Name}};

       var measurements = new Dictionary <string, double>
         {{"Users", currentGame.Users.Count}};

       // Send the exception telemetry:
       telemetry.TrackException(ex, properties, measurements);
    }
    Dim telemetry = New TelemetryClient
    ...
    Try
      ...
    Catch ex as Exception
      ' Set up some properties:
      Dim properties = New Dictionary (Of String, String)
      properties.Add("Game", currentGame.Name)

      Dim measurements = New Dictionary (Of String, Double)
      measurements.Add("Users", currentGame.Users.Count)

      ' Send the exception telemetry:
      telemetry.TrackException(ex, properties, measurements)
    End Try

Les paramètres de propriétés et les mesures sont facultatifs, mais sont utiles pour filtrer et ajouter des informations supplémentaires.The properties and measurements parameters are optional, but are useful for filtering and adding extra information. Par exemple, si vous avez une application qui peut exécuter plusieurs jeux, vous pouvez rechercher tous les rapports d'exception liés à un jeu particulier.For example, if you have an app that can run several games, you could find all the exception reports related to a particular game. Vous pouvez ajouter autant d'éléments que vous le souhaitez à chaque dictionnaire.You can add as many items as you like to each dictionary.

Exceptions du navigateurBrowser exceptions

La plupart des exceptions de navigateur sont signalées.Most browser exceptions are reported.

Si votre page web inclut des fichiers de script à partir de réseaux de distribution de contenu ou d’autres domaines, vérifiez que votre balise de script possède l’attribut crossorigin="anonymous"et que le serveur envoie des en-têtes CORS.If your web page includes script files from content delivery networks or other domains, ensure your script tag has the attribute crossorigin="anonymous", and that the server sends CORS headers. Cela vous permettra d'obtenir une arborescence des appels de procédure et les détails des exceptions JavaScript non gérées à partir de ces ressources.This will allow you to get a stack trace and detail for unhandled JavaScript exceptions from these resources.

Réutiliser votre client de télémétrieReuse your telemetry client

Notes

TelemetryClient est destiné à être instancié une seule fois et réutilisé tout au long de la durée de vie d’une application.TelemetryClient is recommended to be instantiated once and re-used throughout the life of an application.

Voici un exemple d’utilisation correcte de TelemetryClient.Below is an example using TelemetryClient correctly.

public class GoodController : ApiController
{
    // OK
    private static readonly TelemetryClient telemetryClient;

    static GoodController()
    {
        telemetryClient = new TelemetryClient();
    }
}

Formulaires webWeb forms

Pour les formulaires web, le module HTTP pourra collecter les exceptions si aucune redirection n’est configurée avec CustomErrors.For web forms, the HTTP Module will be able to collect the exceptions when there are no redirects configured with CustomErrors.

Mais si vous avez des redirections actives, ajoutez les lignes suivantes à la fonction Application_Error dans Global.asax.cs.But if you have active redirects, add the following lines to the Application_Error function in Global.asax.cs. (Ajouter un fichier Global.asax si vous n'en avez pas déjà).(Add a Global.asax file if you don't already have one.)

    void Application_Error(object sender, EventArgs e)
    {
      if (HttpContext.Current.IsCustomErrorEnabled && Server.GetLastError () != null)
      {
         var ai = new TelemetryClient(); // or re-use an existing instance

         ai.TrackException(Server.GetLastError());
      }
    }

MVCMVC

À partir de la version 2.6 (bêta 3 et versions ultérieures) du Kit de développement logiciel (SDK) web d’Application Insights, Application Insights collecte automatiquement les exceptions non prises en charge qui sont levées dans les méthodes des contrôleurs MVC 5+.Starting with Application Insights Web SDK version 2.6 (beta3 and later), Application Insights collects unhandled exceptions thrown in the MVC 5+ controllers methods automatically. Si vous avez déjà ajouté un gestionnaire personnalisé pour suivre ces exceptions (comme dans les exemples suivants), vous pouvez le supprimer afin d’éviter un double suivi.If you have previously added a custom handler to track such exceptions (as described in following examples), you may remove it to prevent double tracking of exceptions.

Il existe un certain nombre de cas que les filtres d'exception ne peuvent pas gérer.There are a number of cases that the exception filters cannot handle. Par exemple :For example:

  • Les exceptions lancées à partir des constructeurs de contrôleur.Exceptions thrown from controller constructors.
  • Les exceptions lancées à partir des gestionnaires de messages.Exceptions thrown from message handlers.
  • Les exceptions lancées pendant le routage.Exceptions thrown during routing.
  • Les exceptions lancées pendant la sérialisation du contenu de réponse.Exceptions thrown during response content serialization.
  • Exception levée lors du démarrage de l’application.Exception thrown during application start-up.
  • Exception levée dans les tâches en arrière-plan.Exception thrown in background tasks.

Toutes les exceptions prises en charge par l’application doivent toujours faire l’objet d’un suivi manuel.All exceptions handled by application still need to be tracked manually. Les exceptions non prises en charge provenant de contrôleurs aboutissent généralement à une réponse « Erreur interne du serveur » 500.Unhandled exceptions originating from controllers typically result in 500 "Internal Server Error" response. Si cette réponse est construite manuellement à la suite d’une exception prise en charge (ou d’aucune exception), elle est suivie dans la télémétrie de la demande correspondante avec le ResultCode 500, mais le Kit SDK Application Insights n’est pas en mesure de suivre l’exception associée.If such response is manually constructed as a result of handled exception (or no exception at all) it is tracked in corresponding request telemetry with ResultCode 500, however Application Insights SDK is unable to track corresponding exception.

Prise en charge des versions antérieuresPrior versions support

Si vous utilisez MVC 4 (ou une version antérieure) du Kit SDK web 2.5 d’Application Insights (ou une version antérieure), référez-vous aux exemples suivants pour effectuer le suivi des exceptions.If you use MVC 4 (and prior) of Application Insights Web SDK 2.5 (and prior), refer to the following examples to track exceptions.

Si la configuration de CustomErrors est Off, les exceptions seront alors disponibles pour être collectées par le module HTTP.If the CustomErrors configuration is Off, then exceptions will be available for the HTTP Module to collect. Toutefois, si elle est RemoteOnly (valeur par défaut), ou On, l'exception ne sera alors pas disponible pour être collectée automatiquement par Application Insights.However, if it is RemoteOnly (default), or On, then the exception will be cleared and not available for Application Insights to automatically collect. Vous pouvez corriger ce phénomène en remplaçant la classe System.Web.Mvc.HandleErrorAttribute et en appliquant la classe remplacée comme indiqué pour les différentes versions MVC ci-dessous (source GitHub) :You can fix that by overriding the System.Web.Mvc.HandleErrorAttribute class, and applying the overridden class as shown for the different MVC versions below (GitHub source):

    using System;
    using System.Web.Mvc;
    using Microsoft.ApplicationInsights;

    namespace MVC2App.Controllers
    {
      [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
      public class AiHandleErrorAttribute : HandleErrorAttribute
      {
        public override void OnException(ExceptionContext filterContext)
        {
            if (filterContext != null && filterContext.HttpContext != null && filterContext.Exception != null)
            {
                //If customError is Off, then AI HTTPModule will report the exception
                if (filterContext.HttpContext.IsCustomErrorEnabled)
                {   //or reuse instance (recommended!). see note above
                    var ai = new TelemetryClient();
                    ai.TrackException(filterContext.Exception);
                }
            }
            base.OnException(filterContext);
        }
      }
    }

MVC 2MVC 2

Remplacez l'attribut HandleError par votre nouvel attribut dans vos contrôleurs.Replace the HandleError attribute with your new attribute in your controllers.

    namespace MVC2App.Controllers
    {
        [AiHandleError]
        public class HomeController : Controller
        {
    ...

ExempleSample

MVC 3MVC 3

Enregistrez AiHandleErrorAttribute en tant que filtre global dans Global.asax.cs :Register AiHandleErrorAttribute as a global filter in Global.asax.cs:

    public class MyMvcApplication : System.Web.HttpApplication
    {
      public static void RegisterGlobalFilters(GlobalFilterCollection filters)
      {
         filters.Add(new AiHandleErrorAttribute());
      }
     ...

ExempleSample

MVC 4, MVC 5MVC 4, MVC5

Enregistrez AiHandleErrorAttribute en tant que filtre global dans FilterConfig.cs :Register AiHandleErrorAttribute as a global filter in FilterConfig.cs:

    public class FilterConfig
    {
      public static void RegisterGlobalFilters(GlobalFilterCollection filters)
      {
        // Default replaced with the override to track unhandled exceptions
        filters.Add(new AiHandleErrorAttribute());
      }
    }

ExempleSample

API WebWeb API

À partir de la version 2.6 (bêta 3 et versions ultérieures) du Kit de développement logiciel (SDK) web d’Application Insights, Application Insights collecte automatiquement les exceptions non prises en charge qui sont levées dans les méthodes des contrôleurs pour WebAPI 2+.Starting with Application Insights Web SDK version 2.6 (beta3 and later), Application Insights collects unhandled exceptions thrown in the controller methods automatically for WebAPI 2+. Si vous avez déjà ajouté un gestionnaire personnalisé pour suivre ces exceptions (comme dans les exemples suivants), vous pouvez le supprimer afin d’éviter un double suivi.If you have previously added a custom handler to track such exceptions (as described in following examples), you may remove it to prevent double tracking of exceptions.

Il existe un certain nombre de cas que les filtres d'exception ne peuvent pas gérer.There are a number of cases that the exception filters cannot handle. Par exemple :For example:

  • Les exceptions lancées à partir des constructeurs de contrôleur.Exceptions thrown from controller constructors.
  • Les exceptions lancées à partir des gestionnaires de messages.Exceptions thrown from message handlers.
  • Les exceptions lancées pendant le routage.Exceptions thrown during routing.
  • Les exceptions lancées pendant la sérialisation du contenu de réponse.Exceptions thrown during response content serialization.
  • Exception levée lors du démarrage de l’application.Exception thrown during application start-up.
  • Exception levée dans les tâches en arrière-plan.Exception thrown in background tasks.

Toutes les exceptions prises en charge par l’application doivent toujours faire l’objet d’un suivi manuel.All exceptions handled by application still need to be tracked manually. Les exceptions non prises en charge provenant de contrôleurs aboutissent généralement à une réponse « Erreur interne du serveur » 500.Unhandled exceptions originating from controllers typically result in 500 "Internal Server Error" response. Si cette réponse est construite manuellement à la suite d’une exception prise en charge (ou d’aucune exception), elle est suivie dans la télémétrie d’une demande correspondante avec le ResultCode 500, mais le Kit SDK Application Insights n’est pas en mesure de suivre l’exception associée.If such response is manually constructed as a result of handled exception (or no exception at all) it is tracked in a corresponding request telemetry with ResultCode 500, however Application Insights SDK is unable to track corresponding exception.

Prise en charge des versions antérieuresPrior versions support

Si vous utilisez WebAPI 1 (ou une version antérieure) du Kit SDK web 2.5 d’Application Insights (ou une version antérieure), référez-vous aux exemples suivants pour effectuer le suivi des exceptions.If you use WebAPI 1 (and prior) of Application Insights Web SDK 2.5 (and prior), refer to the following examples to track exceptions.

API Web 1.xWeb API 1.x

Remplacez System.Web.Http.Filters.ExceptionFilterAttribute :Override System.Web.Http.Filters.ExceptionFilterAttribute:

    using System.Web.Http.Filters;
    using Microsoft.ApplicationInsights;

    namespace WebAPI.App_Start
    {
      public class AiExceptionFilterAttribute : ExceptionFilterAttribute
      {
        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            if (actionExecutedContext != null && actionExecutedContext.Exception != null)
            {  //or reuse instance (recommended!). see note above
                var ai = new TelemetryClient();
                ai.TrackException(actionExecutedContext.Exception);
            }
            base.OnException(actionExecutedContext);
        }
      }
    }

Vous pouvez ajouter cet attribut remplacé à des contrôleurs spécifiques ou l’ajouter à la configuration du filtre global dans la classe WebApiConfig :You could add this overridden attribute to specific controllers, or add it to the global filter configuration in the WebApiConfig class:

    using System.Web.Http;
    using WebApi1.x.App_Start;

    namespace WebApi1.x
    {
      public static class WebApiConfig
      {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional });
            ...
            config.EnableSystemDiagnosticsTracing();

            // Capture exceptions for Application Insights:
            config.Filters.Add(new AiExceptionFilterAttribute());
        }
      }
    }

ExempleSample

API Web 2.xWeb API 2.x

Ajoutez d'une implémentation de IExceptionLogger :Add an implementation of IExceptionLogger:

    using System.Web.Http.ExceptionHandling;
    using Microsoft.ApplicationInsights;

    namespace ProductsAppPureWebAPI.App_Start
    {
      public class AiExceptionLogger : ExceptionLogger
      {
        public override void Log(ExceptionLoggerContext context)
        {
            if (context !=null && context.Exception != null)
            {//or reuse instance (recommended!). see note above
                var ai = new TelemetryClient();
                ai.TrackException(context.Exception);
            }
            base.Log(context);
        }
      }
    }

Ajoutez cela aux services dans WebApiConfig :Add this to the services in WebApiConfig:

    using System.Web.Http;
    using System.Web.Http.ExceptionHandling;
    using ProductsAppPureWebAPI.App_Start;

    namespace WebApi2WithMVC
    {
      public static class WebApiConfig
      {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.Services.Add(typeof(IExceptionLogger), new AiExceptionLogger());
        }
      }
     }

ExempleSample

Alternativement, vous pouvez :As alternatives, you could:

  1. Remplacer le seul gestionnaire d’exceptions avec une implémentation personnalisée de IExceptionHandler.Replace the only ExceptionHandler with a custom implementation of IExceptionHandler. Celle-ci est appelée uniquement lorsque l'infrastructure est toujours en mesure de choisir le message de réponse à envoyer (mais pas lorsque la connexion est abandonnée par exemple)This is only called when the framework is still able to choose which response message to send (not when the connection is aborted for instance)
  2. Les filtres d'exception (comme décrit dans la section sur les contrôleurs API Web 1.x ci-dessus) ne sont pas appelés dans tous les cas.Exception Filters (as described in the section on Web API 1.x controllers above) - not called in all cases.

WCFWCF

Ajoutez une classe qui étend l'attribut et implémente IErrorHandler et IServiceBehavior.Add a class that extends Attribute and implements IErrorHandler and IServiceBehavior.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel.Description;
    using System.ServiceModel.Dispatcher;
    using System.Web;
    using Microsoft.ApplicationInsights;

    namespace WcfService4.ErrorHandling
    {
      public class AiLogExceptionAttribute : Attribute, IErrorHandler, IServiceBehavior
      {
        public void AddBindingParameters(ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase,
            System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints,
            System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyDispatchBehavior(ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase)
        {
            foreach (ChannelDispatcher disp in serviceHostBase.ChannelDispatchers)
            {
                disp.ErrorHandlers.Add(this);
            }
        }

        public void Validate(ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase)
        {
        }

        bool IErrorHandler.HandleError(Exception error)
        {//or reuse instance (recommended!). see note above
            var ai = new TelemetryClient();

            ai.TrackException(error);
            return false;
        }

        void IErrorHandler.ProvideFault(Exception error,
            System.ServiceModel.Channels.MessageVersion version,
            ref System.ServiceModel.Channels.Message fault)
        {
        }
      }
    }

Add the attribute to the service implementations:

    namespace WcfService4
    {
        [AiLogException]
        public class Service1 : IService1
        {
         ...

ExempleSample

Compteurs de performance des exceptionsException performance counters

Si vous avez installé l’agent Application Insights sur votre serveur, vous pouvez obtenir un graphique du taux d’exceptions, mesuré par .NET.If you have installed the Application Insights Agent on your server, you can get a chart of the exceptions rate, measured by .NET. Celui-ci comprend les exceptions .NET gérées et non gérées.This includes both handled and unhandled .NET exceptions.

Ouvrez un onglet d’explorateur de mesures, ajoutez un nouveau graphique, puis sélectionnez Taux d’exceptionsous Compteurs de performances.Open a Metric Explorer tab, add a new chart, and select Exception rate, listed under Performance Counters.

.NET Framework calcule le taux en comptant le nombre d’exceptions sur un intervalle et en divisant ce nombre par la longueur de l’intervalle.The .NET framework calculates the rate by counting the number of exceptions in an interval and dividing by the length of the interval.

Ce chiffre sera différent du nombre d’« exceptions » calculé par le portail Application Insights, qui est basé sur les rapports TrackException.This is different from the 'Exceptions' count calculated by the Application Insights portal counting TrackException reports. Les intervalles d’échantillonnage sont différents et le Kit de développement logiciel (SDK) n’envoie pas de rapports TrackException pour toutes les exceptions gérées et non gérées.The sampling intervals are different, and the SDK doesn't send TrackException reports for all handled and unhandled exceptions.

Étapes suivantesNext steps