IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Affichage des résultats du sondage: Vous arrive t'il de faire des applis employant plusieurs domaines d'application?

Votants
3. Vous ne pouvez pas participer à ce sondage.
  • Oui

    2 66,67%
  • Non

    1 33,33%
  • C'est quoi un Domaine d'Application?

    0 0%
Langages Discussion :

AppDomain = rien ne va


Sujet :

Langages

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut AppDomain = rien ne va
    Bonjour à tous.

    Depuis quelques jours je me penche sur les domaines d'application. A la lecture de plusieurs articles, j'étais tres séduit par les points suivant :
    • Un AppDomain, à l'instar d'un processus permet d'isoler les données, il a son stack, son thread principal
    • On peut décharger un AppDomain, et donc décharger toutes Ses assemblies
    • En cas de crash du AppDomain que l'on a créé, le Domaine d'application principale n'en patie pas, il peut recharger le AppDomain "enfant".
    Super ! donc on peut faire du versionning, créer des "SandBox" pour chaque plugin, gérer des exceptions critiques, juste ce qu'il me fallait !!! ...... que je me disais alors

    Car d'apres mes premiers essais, rien ne va :
    • Si une exception est levée dans mon AppDomain enfant, celle ci se propage jusqu'au AppDomain principal, le faisant ainsi planter !!!!
    • Quand je demande à décharger le AppDomain enfant, si il a un thread toujours en cours, il ne se déchargera jamais !
    • Je constate que c'est le meme thread, le thread principal (mon Main) qui sert à executer les methodes de mon plugin (pourtant dans le AppDomain enfant) !!!!!!!! ...meme thread? meme stack ! non? donc aucune isolation?!?!?
    Voila, je ne vais pas trop rentrer dans le détail pour éviter un topic parechemin, juste je précise que pour communiquer entre mes 2 domaines d'application, je fais du remoting

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IPlugin plg1 = (IPlugin) _monDomaineEnfant.CreateInstanceFromAndUnwrap("plugin1.dll","MesPlugins.Plugin1");
    Je suis donc totalement déboussolé, et je vous demande donc simplement svp :
    1. Qui utilise les domaines d'application multiple?
    2. Est il possible d'empecher une exception de se propager d'un domaine à l'autre?
    3. Est il possible de forcer un domaine à se décharger (à la façon qu'on décharge un processus quand on le tue) ?


    Un grand merci d'avance à ceux qui sauront me répondre.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Bon, et bien je vais tenter de me répondre

    1) Visiblement personne

    2) Non. Il y a bien l'event AppDomain.UnhandledException , mais il ne rattrape pas l'erreur, il permettent juste d'effectuer des taches avant que le host ne se ferme (loguer l'exception dans un fichier par exemple). De plus il ne fonctionne que sur le AppDomain principal, et ne transporte pas l'info "quel AppDomain a levé l'exception"

    J'ai trouvé de nombreux topic sur la toile "Comment éviter qu'une exception dans un AppDomaine enfant, ne fasse planter le AppDomaine principal", les seules solutions proposées etaient très , très compliquées, et s'appliquent au CLR, pas au code de notre appli

    3) Non, c'est à nous de tout libérer au moment où l'on souhaite décharger le AppDomain, cela peut se faire entre autre lorsque AppDomain.DomainUnload est déclenché

Discussions similaires

  1. [ jointure externe ] j'y pompe rien
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/12/2003, 17h57
  2. Réponses: 8
    Dernier message: 04/09/2003, 16h07
  3. Ne rien afficher
    Par rockbiker dans le forum DirectX
    Réponses: 3
    Dernier message: 20/05/2003, 18h02
  4. [debutante] [JDBComboBox]rien à l'affichage
    Par Lina dans le forum JBuilder
    Réponses: 3
    Dernier message: 22/11/2002, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo