[C#] Service Windows vérification fichiers périodique et alerte mail

Service Windows vérification fichiers périodique et alerte mail [C#] - C#/.NET managed - Programmation

Marsh Posté le 13-04-2010 à 11:19:53    

Salut,
 
Déjà je précise, j'ai toujours bossé en C++ sur Borland, et je suis complètement newb sur Visual.
 
Alors voila, j'ai comme objectif de faire un petit service sous Visual 2008 en C# qui scrute toutes les x heures des fichiers arrivant par le réseau, qui les compare pour éviter les doublons et les fichiers vides, et qui envoie un mail à une liste de diffusion pour prévenir certaines personnes en cas de défaut sur les fichiers. Ce service Windows doit être paramétrable avec une icône dans le systray (heures de scrutation, destinataires des mails, etc.), enregistrer ces paramètres dans un fichiers XML et créer un fichier LOG de trace.
 
Mes principaux problèmes sont (n'ayant jamais touché à Visual je le re-précise :D) :
- Comment afficher mon icône associé au service dans le systray ? il faut créer une form en plus du service ? ou autre ? J'ai essayé de coller un TnotifyIcon sur le design mais il n'apparait pas...
- Comment envoyer le mail ? (basique, que du texte)
 
Merci d'avance :jap:


Message édité par Deton@tor le 26-04-2010 à 22:07:24

---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 13-04-2010 à 11:19:53   

Reply

Marsh Posté le 13-04-2010 à 13:02:50    

Ah ok cool, merci pour la réponse, je vais tester smtpclient :)
 
Pour l'icone si quelqu'un a une idée... Je continue à tester mais sans succès :(


---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 13-04-2010 à 13:12:18    

Reply

Marsh Posté le 13-04-2010 à 14:12:39    

J'avais déjà vu cet article et testé, ça fonctionne avec une Application classique mais impossible de faire apparaitre l'icône en utilisant un projet de type service. Je dois mal m'y prendre :(


---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 13-04-2010 à 15:58:25    

Un service n'ayant pas de GUI ca me semble parfaitement logique.
 
Fais un autre executable en mode application permettrant de paramétrer le service en modifiant le fichier de configuration, lancé au logon des utilisateurs.
 
Ensuite tu t'arranges pour que le service recharge sa configuration a chaque modification du fichier.

Reply

Marsh Posté le 13-04-2010 à 16:32:48    

Arf j'ai trouvé, c'est tout bête...

 

http://hfr-rehost.net/self/pic/397170165f072220115a3f636e57a22d6404b771.png

 

Ouep je sais qu'associer une ihm à un service c'est pas top puisque le but du service c'est d'être autonome sans interactions mais c'est question de facilité, j'ai juste 3/4 variables paramétrables.

 

Par contre je n'ai pas trouvé comment activer l'option à partir du ProcessInstaller de mon service.


Message édité par Deton@tor le 13-04-2010 à 16:34:31

---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 14-04-2010 à 13:57:42    

A ta place moi aussi je séparerai l'administration du service proprement dit. Ton approche contrevient selon moi à la vocation des services (qui en plus doivent pouvoir tourner même sans session d'ouverte) et complique un peu la maintenance, même s'il s'agit de peu de chose au final.

 

Je pense qu'un EXE dédié pour l'admin qui viendrait écrire un fichier (INI ou XML par exemple) surveillé par le service par un FileSystemWatcher donnerait un bon résultat. Tu pourrais aussi recharger le fichier explicitement sans chercher à voir s'il a été modifié à chaque boucle du service puisque tu dis qu'il tourne à intervalles réguliers...


Message édité par TotalRecall le 14-04-2010 à 13:58:18

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 14-04-2010 à 18:45:12    

Bon ok je vais partir sur ça alors, je préfère faire proprement.
Oui c'est bien un fichier XML pour la config, les fonctions de lecture/écriture des paramètres sont déjà implémentées :)


---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 19-04-2010 à 10:35:41    

Bon je reviens car petit changement...
 
En fait je dois attaquer un serveur Exchange 2003 et non plus un SMTP.
Je pense qu'on ne peut plus utiliser le ClientSMTP...
Des idées ? Car je n'ai rien trouvé de concluant :(
 
Thanks !


---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 19-04-2010 à 13:25:31    

Ah ! Pourrais tu me donner les quelques lignes de codes pour les paramètres du ClientSMTP si tu les as sous la main ? Car je me prends des "Unauthorized" sans arrêt :(
Et il ne faut plus attaquer port 25 avec Exchange ?
 
J'ai vu 2/3 exemples qui utilisaient WebDAV et ExchangeSDK également mais pas encore testé...
 
Merci d'avance :jap:


---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 19-04-2010 à 13:25:31   

Reply

Marsh Posté le 19-04-2010 à 13:39:46    

Ok thanks, effectivement mon bout de code est similaire...
 
Je vais demander aux admins du serveur mail, c'est surement pour cela que je n'arrive pas à y accéder depuis mon poste de dev malgré une passerelle entre les 2. Au final le service sera installé directement sur un des serveurs de fichiers du domaine qui dispose déjà des autorisations donc ce problème d'accès ne sera plus :)


---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 22-04-2010 à 21:55:12    

Bon, je re-reviens :D

 

Alors voila, mes fonctions principales fonctionnent correctement pour le peu de tests unitaires que j'ai effectué.
Maintenant je vais intégrer mes traitements dans le service périodique...

 

Pour détailler un peu plus, voila le déroulement chronologique des taches du traitement.

 

Le traitement principal sur les fichiers doit s'effectuer toutes les 2 heures.
Il doit s'effectuer seulement entre 10h et 20h dans la journée (donc à 10h, 12h, 14h, 16h, 18h et 20h)
Il doit s'effectuer seulement du lundi au vendredi
Il doit s'effectuer toute l'année sauf certaines plages de tel jour à tel jour (2 semaines de fermeture annuelle de l'entreprise).

 

Bref, que pendant les horaires d'ouverture d'un bureau de notre entreprise, hors plages de fermeture pour vacances (1 semaine en aout et 1 semaine en décembre)

 

Voila mes interrogations :
1) Comment activer mes traitements dans ces périodes de traitement ?

 

2) Si je mets ça dans un Timer avec période de 2h, au "Start" je vérifie à chaque fois que l'on est bien entre 10h et 20h, entre lundi et vendredi, et hors périodes de vacances le tout avec des DateTime/TimeSpan,ça vous parait correct comme démarche ?

 

3) Si je pars sur un déclenchement toutes les 2h à partir de 10h, est-ce qu'il y a un risque que mon dernier traitement se déclenche à 20h00m02s et donc ne se lance pas à cause de la précision des Timers ou un décalage de l'évènement si le CPU est occupé à ce moment là par exemple ?

 

4) Comment vérifier si l'utilisation de la mémoire sera stable dans le temps ? Car pour un service 24/24 j'aimerai éviter au max les fuites mémoires mais pas envie d'attendre 1 an pour voir ce que ça donne :D

 

Merci pour vos lumières :jap:


Message édité par Deton@tor le 22-04-2010 à 21:57:55

---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 24-04-2010 à 15:18:07    

Ok merci de toutes ces réponses, c'est cool que tu prennes le temps de me répondre complètement. Il faut que je regarde si tout est ok sur le serveur pour utiliser le planificateur de taches.


---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 24-04-2010 à 21:03:12    

Si c'est réellement un serveur peut être qu'il y a dessus un vrai scheduler pour les processes, histoire d'utiliser un truc un tout petit peu sérieux.


Message édité par TotalRecall le 24-04-2010 à 21:07:16

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 25-04-2010 à 00:29:58    

Je ne sais pas, on ne m'a pas encore laissé la main pour fouiner dessus, l'admin était en vac cette semaine et j'ai développé un peu à l'aveuglette par rapport au système qui accueillera le service. Ce que je sais c'est que c'est un serveur HP, avec 2003 server et qu'il y a un dossier synchronisé par le réseau (en FTP) environ toutes les 20min et il faut scruter pour voir si les fichiers arrivé sont corrects.


Message édité par Deton@tor le 25-04-2010 à 00:30:53

---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 26-04-2010 à 22:10:05    

Bon...

 

Le détail qui m'embête avec la planification c'est que le 1er traitement de la journée est différent des suivants.
Les timers sont-ils précis et calés sur l'horloge Windows ? Car avec notre serveur NTP l'horodatage de nos machine est assez stable.
Dommage je ne trouve aucun exemple de Timer sur de longues durées...

 

Merci


Message édité par Deton@tor le 26-04-2010 à 22:10:51

---------------
Mon matos | Mon Feedback
Reply

Marsh Posté le 26-04-2010 à 23:35:20    


Beurk. Et le jour où on veut modifier la planification, on edite et recompile le programme ? S'taffreux !!
 
A la limite, utilise un commutateur au lancement du programme, et fais une tâche planifiée différente à 10h (qui utilise donc ce commutateur) et aux autres horaires (sans le commutateur)


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed