Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1114 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  AppDomain et Exception Handling

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

AppDomain et Exception Handling

n°1540183
blackgodde​ss
vive le troll !
Posté le 08-04-2007 à 13:54:55  profilanswer
 

Bonjour,
 
Je cherche à créer des sous-domaines dans une application, afin de pouvoir exécuter du code dans un espace "confiné". Je voudrais donc qu'une exception levée (et pas interceptée) dans un sous-domaine ne fasse pas planter mon application.
Cependant j'ai quelques soucis pour ne faire "planter" que le sous-domaine.
 
La documentation de AppDomain.UnhandledException dit :  
 
"This event occurs only for the application domain that is created by the system when an application is started. If an application creates additional application domains, specifying a delegate for this event in those applications domains has no effect."
 
Visiblement, cet évenement est quand même déclenché dans un sous-domaine, par contre l'exception est propagée malgré l'interception de cet évenement, et ferme donc l'application entière.
 
Un exemple de code pour tester cela :
 

Code :
  1. using System;
  2. namespace TestAppDomain
  3. {
  4.     class Program
  5.     {
  6.         static AppDomain domain;
  7.         static void Main(string[] args)
  8.         {
  9.             domain = AppDomain.CreateDomain("child" );
  10.             domain.UnhandledException += new UnhandledExceptionEventHandler(domain_UnhandledException);
  11.             domain.DoCallBack(new CrossAppDomainDelegate(ChildDomainEntry));
  12.             Console.ReadLine();
  13.         }
  14.         static void ChildDomainEntry()
  15.         {
  16.             new System.Threading.Thread(new System.Threading.ThreadStart(Boom)).Start();
  17.         }
  18.         static void Boom()
  19.         {
  20.             throw new Exception();
  21.         }
  22.         static void domain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
  23.         {
  24.             Console.WriteLine("AppDomain = " + AppDomain.CurrentDomain.FriendlyName);
  25.             Console.WriteLine(e.ExceptionObject.ToString());
  26.             //AppDomain.Unload(domain);
  27.         }
  28.     }
  29. }


 
l'exception est bien écrite à la console, puis l'application est fermée.
 
Comment faire en sorte de ne faire fermer que le domaine fils, et pas l'application entière ?
 
Merci de vos réponses


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 08-04-2007 à 13:54:55  profilanswer
 

n°1540251
_Mose_
Lonesome coder
Posté le 08-04-2007 à 17:52:43  profilanswer
 

Ca me choque pas que ca plante.
T'as pas essayé de faire un try / catch autour de ton DoCallBack ?

n°1540257
blackgodde​ss
vive le troll !
Posté le 08-04-2007 à 18:17:22  profilanswer
 

Je lance l'exception exprès dans un autre thread pour ne pas qu'elle remonte dans l'appelant, pour simuler un plantage dans le domaine fils indépendant de l'appel inter-domaine.
 
voila le nouveau code :
 

Code :
  1. using System;
  2. namespace TestAppDomain
  3. {
  4.     class Program
  5.     {
  6.         static AppDomain domain;
  7.         static void Main(string[] args)
  8.         {
  9.             domain = AppDomain.CreateDomain("child" );
  10.             domain.UnhandledException += new UnhandledExceptionEventHandler(domain_UnhandledException);
  11.             try
  12.             {
  13.                 domain.DoCallBack(new CrossAppDomainDelegate(ChildDomainEntry));
  14.             }
  15.             catch (Exception e)
  16.             {
  17.                 Console.WriteLine("Catch dans Main" );
  18.                 Console.WriteLine(e.Message);
  19.             }
  20.             Console.ReadLine();
  21.         }
  22.         static void ChildDomainEntry()
  23.         {
  24.             new System.Threading.Thread(new System.Threading.ThreadStart(Boom)).Start();
  25.         }
  26.         static void Boom()
  27.         {
  28.             throw new Exception();
  29.         }
  30.         static void domain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
  31.         {
  32.             Console.WriteLine("AppDomain = " + AppDomain.CurrentDomain.FriendlyName);
  33.             Console.WriteLine(e.ExceptionObject.ToString());
  34.            
  35.             //AppDomain.Unload(domain);
  36.         }
  37.     }
  38. }


 
L'exception n'est pas catché dans le block try/catch autour du DoCallBack

n°1540373
moi23372
Posté le 09-04-2007 à 11:42:47  profilanswer
 

tu n'as pas un élément dans ta variable e de type "UnhandledExceptionEventArgs" qui te permettrait de faire un cancel sur l'exception ou un truc dans ce genre la?

n°1540419
blackgodde​ss
vive le troll !
Posté le 09-04-2007 à 16:29:43  profilanswer
 

Je ne vois pas non. Je peux me tromper merci de me le dire dans ce cas


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  AppDomain et Exception Handling

 

Sujets relatifs
balise a et padding, exception ?Axis Fault exception
Expliquez moi les "Handler Exception"[Batch] Créer une exception pour la commande DEL
Threading et exception?Pb exception qui agassent!
ASP.NET -> Memory Exception, introuvable j'en peut plus ![mySQL] L'exception SocketException n'a pas été gérée ...
[Résolu][C# .net] SqlDataReader ne contenant rien => exceptionException in thread "main".java.lang.StringIndexOutOfBoundsException
Plus de sujets relatifs à : AppDomain et Exception Handling


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR