|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Invité régulier
![]() Développeur .NET Inscription : août 2011 Messages : 12 ![]() |
Bonjour,
J'ai développé un serveur TCP qui fonctionne parfaitement lorsqu'il est appelé depuis un projet winform. Le but est que ce serveur TCP soit utilisé par un service windows. J'ai intégré ce serveur dans un projet de type DLL, DLL que j'utilise par la suite dans mon projet de service windows... Tout fonctionne parfaitement sauf que... quand je démarre mon service (installé au préalable par installutil monservice) depuis le gestionnaire de service la barre de progression du lancement du service est très lente et me renvoie un Citation:
Merci d'avance pour votre aide. Le service windows : Code :
Code :
|
|||||
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() François Chef de projet NTIC Inscription : janvier 2007 Messages : 6 558 ![]() |
C'est pas étonnnant : ton "Start" n'est pas un start mais une boucle d'exécution qui ne termine jamais.
La méthode OnStart doit démarrer ton service et retourner au SCM pour signaler que le service a démarré sans erreur. Or, elle ne retourne jamais, donc le SCM en conclue (à juste titre) que ton service n'a pas répondu et pas démarré correctement. Je te suggère que tu lises un tuto sur la programmation de service en .Net car c'est la c'est une application que tu as écrit, pas un service.
__________________
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça... Une réponse vous a aidé ? utiliser le bouton "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel |
|
|
00
|
|
|
#3 | ||||
![]() ![]() ![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 17 839 ![]() |
Pour faire simple, la solution est de lancer un nouveau thread qui exécute ta méthode StartListening :
Code :
Code :
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
||||
|
00
|
|
|
#4 | ||||||
|
Invité régulier
![]() Développeur .NET Inscription : août 2011 Messages : 12 ![]() |
Tout d'abord merci à vous deux pour vos réponses.
Citation:
Citation:
J'ai bien créé la propriété StopRequested et ai remplacé ma boucle while(true) par while(!stopRequested). A dire la vérité je ne comprends pas pourquoi ça ne fonctionne pas car dans la logique ça me semble correct... la méthode StartListening est appelé lors du démarrage du service et la propriété StopRequested est testée à chaque itération donc il devrait sortir de la boucle lorsque StopRequested est modifié de false vers true lors du onStop()... Je ne sais pas si cela est une bonne façon de faire mais l'arrêt du service fonctionne correctement si je supprime ces deux lignes : Code :
merci |
||||||
|
00
|
|
|
#5 |
|
Invité régulier
![]() Développeur .NET Inscription : août 2011 Messages : 12 ![]() |
J'ai vérifié en mode debug, lors de l'arrêt du service la méthode OnStop() est bien appelée et StopRequested passe bien à true mais le service me renvoie l'erreur 1053 sur le _thread.Join().
|
|
00
|
|
|
#6 | ||||
![]() ![]() ![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 17 839 ![]() |
En fait le problème est dans ta boucle :
Code :
En fait il faudrait que tu mettes un timeout sur le waitone, et que tu boucles jusqu'à ce qu'il renvoie true : Code :
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
||||
|
00
|
|
|
#7 |
|
Invité régulier
![]() Développeur .NET Inscription : août 2011 Messages : 12 ![]() |
Ca parait logique (si j'ai bien tout compris...), il attends une réponse sur le WaitOne pendant 100ms, s'il n'en reçois pas pendant ce laps de temps il se mange le timeout et boucle dans le while imbriqué, StopRequested a été mis à true dans le onstop() et est retesté par la condition de ce while imbriqué donc sortie de la boucle imbriqué puis retest de StopRequest dans le while "parent" et sortie de cette boucle également.
Parfait ! ça fonctionne à merveille ! merci encore
|
|
00
|
Copyright © 2000-2013 - www.developpez.com