Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2292 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1983503
Deton@tor
Posté le 13-04-2010 à 11:19:53  profilanswer
 

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
mood
Publicité
Posté le 13-04-2010 à 11:19:53  profilanswer
 

n°1983562
Deton@tor
Posté le 13-04-2010 à 13:02:50  profilanswer
 

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
n°1983569
ccp6128
Syntax error
Posté le 13-04-2010 à 13:12:18  profilanswer
 
n°1983597
Deton@tor
Posté le 13-04-2010 à 14:12:39  profilanswer
 

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
n°1983655
ccp6128
Syntax error
Posté le 13-04-2010 à 15:58:25  profilanswer
 

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.

n°1983686
Deton@tor
Posté le 13-04-2010 à 16:32:48  profilanswer
 

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
n°1983911
TotalRecal​l
Posté le 14-04-2010 à 13:57:42  profilanswer
 

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
n°1984041
Deton@tor
Posté le 14-04-2010 à 18:45:12  profilanswer
 

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
n°1985396
Deton@tor
Posté le 19-04-2010 à 10:35:41  profilanswer
 

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
n°1985443
Deton@tor
Posté le 19-04-2010 à 13:25:31  profilanswer
 

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
mood
Publicité
Posté le 19-04-2010 à 13:25:31  profilanswer
 

n°1985450
Deton@tor
Posté le 19-04-2010 à 13:39:46  profilanswer
 

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
n°1986848
Deton@tor
Posté le 22-04-2010 à 21:55:12  profilanswer
 

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
n°1987256
Deton@tor
Posté le 24-04-2010 à 15:18:07  profilanswer
 

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
n°1987314
TotalRecal​l
Posté le 24-04-2010 à 21:03:12  profilanswer
 

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
n°1987336
Deton@tor
Posté le 25-04-2010 à 00:29:58  profilanswer
 

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
n°1987762
Deton@tor
Posté le 26-04-2010 à 22:10:05  profilanswer
 

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
n°1987785
TotalRecal​l
Posté le 26-04-2010 à 23:35:20  profilanswer
 


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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 

Sujets relatifs
Ouverture de fichiers[Résolu] Arbre "logique" > PDAG & Co.
DEV C++C# Datagridview
Stockage de données : BDD/Fichiers/En mémoireTrouver l'adresse d'une méthode C++ en assembleur
Faut-il apprendre le C avant le C++ ?Langage C : concaténation de chaines de caractères
Client FTP fonctionnant avec script <> du FTP WindowsCasse-tête... Class Library C++/CLI vers C#?
Plus de sujets relatifs à : [C#] Service Windows vérification fichiers périodique et alerte mail


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR