2009-11-26 7 views
0

J'héberge le service WCF dans une application console (temporaire, je vais passer au service ultérieurement en utilisant le compte administrateur). Après plusieurs heures d'exécution, je reçois une erreur critique de la console (HOST) et mon service cesse de fonctionner. Quelle est la meilleure méthode pour tracer une erreur? J'ai essayé le code ci-dessous pour enregistrer l'erreur, mais il semble que le code n'attrape pas l'erreur. Je pense que je dois gérer l'erreur à l'intérieur du service WCF et non dans l'application hôte. Des suggestions?Erreur critique dans le service WCF

namespace ConsoleApplication1 
{ 
    //test host project 
    class Program 
    { 
     static void Main(string[] args) 
     {      

      using (var serviceHost = new ServiceHost(new ServicePdf())) 
      { 
       try 
       {      
        serviceHost.Open(); 
        Console.WriteLine("Service was succesfully hosted. Press [enter] to exit..."); 
        Console.ReadLine();      
       } 
       catch (Exception ex) 
       {      
        MethodToLogError(ex); 
        Console.WriteLine("Error occured while hosting service. Press [enter] to exit..."); 
        Console.WriteLine(ex.Message); 
        Console.ReadLine(); 
       } 
      } 
     } 
    } 
} 

Cordialement, Tomas

Répondre

1

Vous pouvez attraper une exception non gérée dans votre hôte (que ce soit du thread principal ou tout autre thread) en vous inscrivant à l'événement AppDomain.UnhandledException.

static void Main(string[] args) 
     { 
      //... 
      AppDomain.CurrentDomain.UnhandledException += exceptionHandler; 
      //... 
} 

static void exceptionHandler(object sender, UnhandledExceptionEventArgs args) 
{ 
     Exception e = (Exception) args.ExceptionObject; 
     Console.WriteLine("An unhandledexception occurred. Time to die. " + e); 
} 

De cette façon, vous pouvez enregistrer l'exception. Cependant, aucun moyen de s'en remettre gracieusement.

0

Si cela se produit après plusieurs heures, cela ressemble à une fuite de ressources quelconque. À l'aide de Process Explorer, vérifiez l'utilisation de la mémoire de l'application. quelque chose de plus de quelques centaines de mégaoctets implique généralement un problème.

Traçage de ceux-ci est un art en soi; Souvent, une session avec Windebug est requise. C'est généralement une ressource inédite (dans un service WCF, vérifiez le code de votre base de données) ou un problème avec les gestionnaires d'événements.

Questions connexes