Bonjour,
Je dois developpé un service Windows en D6 qui fait la chose suivante :
- Tous les n secondes, il se charger de transférer ou récupérer des fichiers en FTP (ou LAN) sur des serveurs Windows ou Unix.
-Ce service n'a qu'une méthode Execute qui se charge de faire les opérations de transfert (ou de récupérations) donc aucun thread secondaire.
-J'utilise les composants Indy natif de D6.
Je teste depuis quelques jours ce service afin de vérifier qu'il fonctionnera bien en production. La boucle d'appel s'execute toutes les 10sec.
Il peut tres bien fonctionner pendant 48H ou plus et d'un coup, il bloque sur un FtpClient.get ou sur un ftpclient.put. Le problème est que le service ne récupéra jamais la main.
Ce n'est pas comme si on avait arrêter le serveur FTP ou couper le réseau ... là avec un try..except on récupère la main au bout de quelques instants mais la NON .. IMPOSSIBLE.
Même en arrêtant le serveur FTP en face ou en rebootant le serveur en face ou tout autre chose, rien à faire le service se bloque .. il n'y a plus qu'à le killer et à le relancer ...
J'ai vu qu'on pouvait utiliez les IDANtiFreeze dans une appli WinDows avec des Forms mais dans un service que peut on faire ? Car même via un thread, on peut (je pense) avoir le même problème .. à savoir que le thread se bloquera et il faudra killer le thread ..
Avez vous déjà rencontré ce genre de soucis ?
Quelles idées auriez vous ?
Merci d'avance!
MCH
Partager