Pour une raison quelconque, après avoir utilisé un IpcChannel et l'avoir arrêté, le namedpipe reste parfois ouvert, avec un thread en attente. Je ne peux pas faire cela à la demande dans un environnement de débogage, mais cela arrive 5 à 10 fois par jour dans notre environnement de production. Le mauvais effet est que cela m'empêche de décharger l'appdomain car il y a un thread qui attend infiniment sur le pipe nommé (dans une méthode native) ... aucun frame sur la callstack n'est dans mon code - c'est un interne. fil net. Si je lance l'explorateur de processus et trouve la poignée de pipe nommée qui a été laissée ouverte et la ferme de force, alors tout redevient heureux, l'appdomain se décharge bien. Il est possible que je fasse quelque chose de mal car je n'ai pas beaucoup travaillé avec IpcChannels ... mon code côté serveur est ici: http://pastebin.com/f6e2583b9 si quelqu'un veut jeter un coup d'oeil ... ceci est en cours d'exécution sur Server2003 entièrement patché /.NET 2.0. Comme une solution de contournement moche, je pense que je vais suivre tous les canaux que je crée, puis vérifier périodiquement pour s'assurer qu'ils se ferment correctement, puis sur décharger appdomain je vais fermer avec force tous les tuyaux qui restent pendaison .... quelqu'un peut-il me diriger dans la bonne direction quant à la façon dont je pourrais le faire? Je connais le nom de la pipe .... mais je ne suis pas sûr de savoir si elle est encore ouverte, ou comment fermer toutes les poignées existantes ....NET IpcChannel ne nettoie pas correctement correctement?
4
A
Répondre
1
oui je l'ai vu avant. une chose similaire peut se produire avec IPC quand le client a encore le canal IPC ouvert - le serveur ne pourra pas le fermer et l'ouvrir de nouveau parce qu'il est déjà utilisé par le client. Pour contourner ces problèmes, il est recommandé de placer TOUTES les créations de canal du serveur IPC dans un domaine AppDomain. puis, lorsque vous souhaitez l'éteindre, vous effectuez simplement les procédures d'arrêt habituelles 'nice' de close() suivies d'un déchargement AppDomain. Cela nuke tout excédent laissé.
il enlèvera toutes les choses liées à IPC aussi bien que lancer le client dans la tête pour monopoliser le canal IPC;)
Questions connexes
- 1. par défaut WM_DESTROY ne nettoie pas correctement les fenêtres enfants
- 2. ListViewGroup ne pas trier correctement
- 3. PHP ne fonctionne pas correctement
- 4. Html.ActionLink ne rend pas # correctement
- 5. ScrollViewer ne s'affiche pas correctement?
- 6. mysqldump ne fonctionne pas correctement
- 7. UIScrollView ne redimensionne pas correctement
- 8. XPath ne fonctionne pas correctement
- 9. keybd_event ne fonctionne pas correctement = (
- 10. QWebView ne s'affiche pas correctement
- 11. lightbox ne fonctionne pas correctement
- 12. grep: "^." ne correspond pas correctement
- 13. RedirectToAction ne fonctionne pas correctement
- 14. REFind ne fonctionne pas correctement
- 15. Fancybox ne s'affiche pas correctement
- 16. mousePressEvent ne pas lier correctement?
- 17. Anchor ne défile pas correctement
- 18. UIActivityIndicator ne fonctionne pas correctement?
- 19. tag ne fonctionne pas correctement
- 20. MapPoint ne s'éteint pas correctement?
- 21. XLL ne charge pas correctement
- 22. ne s'affiche pas correctement
- 23. MKDIR ne fonctionne pas correctement?
- 24. popToRootViewControllerAnimated ne fonctionne pas correctement
- 25. GL_LINE_LOOP ne dessine pas correctement
- 26. html_entity_decode() ne fonctionne pas correctement?
- 27. UIImagePickerControllerDelegate ne répond pas correctement
- 28. wcstombs_s ne fonctionne pas correctement
- 29. flashdevelop ne compile pas correctement
- 30. RichTextBox ne fonctionne pas correctement