IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Timers et WindowsService


Sujet :

VB.NET

  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut Timers et WindowsService
    Bonjour à tous,

    J'ai un problème étrange (un de plus...).

    Je commence par planter le décor.

    J'ai un service windows qui possède un contrôle de type System.Timers.Timer (c'est important car il ne s'agit du même timer que pour les winforms).

    Mon service démarre très bien avec log dans le journal des évènements qui a été créé spécialement pour lui.

    Malheureusement, on dirait que l'évènement Elapsed du-dit timer n'est jamais levé.

    Il n'y a pas d'erreur dans la procédure OnStart du service. J'ai placé une ligne d'écriture dans le journal à la fin de OnStart pour être sûr. S'il y avait une erreur avant, cette instruction n'écrirait pas dans le journal.

    Dans l'event du timer, je commence d'abord par des déclarations de variables tout ce qu'il y a de plus banales. Rien qui puisse provoquer une erreur selon moi. Voici quand même le code au cas où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim fl As String = ""
    Dim table, ext As String
    Dim erreur As Boolean = False
    Dim criterias As New Arraylist
     
    Jevent.WriteEntry("Check du créneau horaire")
    Voilà donc le code, je vous ai même mis la ligne suivante qui est donc sensée écrire dans le journal. La ligne d'après est une simple comparaison entre l'heure actuelle et l'heure où doit avoir lieu le traitement.

    Quoi qu'il en soit, même si ce n'est pas la bonne heure, je dois voir apparaître la phrase "Check du créneau horaire" dans le journal. Or ce n'est pas le cas.

    Quelqu'un aurait-il une idée ? De ce que je peux voir, le service se comporte comme si l'event n'était jamais levé.

    Ah oui, autre détail particulier.
    Avant (genre avant la semaine de vacances que je viens de prendre), si je faisais un run dans VS du projet, VS ralait car il ne pouvait l'exécuter du fait que c'est un service (pour je ne sais plus quelle raison). J'ai remarqué en faisant un run par erreur ce matin que maintenant, cela fonctionne....

    Cela apportera p-e un indice à quelqu'un de calé sur le sujet.

    Bref, I need help

    Merci d'avance.

    Griftou.

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour,
    question à la con, mais on ne sais jamais, tu lances bien le timer avec ca fonction start? (Je sais ca a l'aire con mais des fois on en fait des conneries hein ^^)

  3. #3
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    euh,
    question idiote tu n'as pas oublié le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTimer.Enabled = true;
    par hasard ?
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Citation Envoyé par benji_dv Voir le message
    euh,
    question idiote tu n'as pas oublié le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTimer.Enabled = true;
    par hasard ?
    Trop fort, posté en même temps...

  5. #5
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Bien vu mais non ce n'est pas ça ^^.

    Pour l'info, que ce soit avec Timer1.Enabled = True ou Timer1.Start(), le résultat est le même pour mon problème...

    Merci quand même.

    Quelqu'un d'autre ? ^^

  6. #6
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    même idée

    en même temps la première cause de panne réseau est... le cable débranché
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  7. #7
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    sinon, te reste toujours la possibilité d'utiliser un thread du threadpool avec une boucle, et un thread.sleep
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  8. #8
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Bah non, je ne veux pas faire l'autruche.

    Ce service fonctionnait très bien avant... Y a pas de raison... Ca doit encore fonctionner.

    Je pige vraiment pas... J'espère que ce n'est pas pcq'un zouave de collègue est venu chipoter dedans pendant ma semaine de vacances et que je ne vois pas ce qu'il a modifié...

    Je l'aurais mauvaise là...

  9. #9
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    T'as essayé en debuguant ?
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  10. #10
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Reporte toi à "autre détail particulier" dans mon premier message.

    Cependant, même si le débogage ne devrait pas fonctionner selon moi, cela fonctionne (du moins mon timer s'enclenche)

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    inquiète toi justement de savoir pourquoi tu arrive à déboguer...

    un service Windows de par son main radicalement différent d'une application windows NE PEUT PAS s'exécuter ou se déboguer, meme hébergé, sous Visual Studio...

    effectivement c'est bien System.Timers.Timer qu'il faut utiliser avec les services car celui des winforms ou wpf n'est pas assez précis et ne peut pas fonctionner vu que le thread qui pompe la file de messages UI n'existe pas...

    ensuite utiliser System.Threading.Timer ou un sleep sur des thread de la pool n'est pas une solution car ces timers ne sont pas précis du tout et engendre une dérive... si ton test doit avoir lieu a intervals réellement réguliers ces pseudos timers ne sont pas exploitables.

    Non à mon sens ton problème semble ce trouver dans le Main de l'application, qui a due etre créé par VS quand tuas choisi Windows Service...
    vérifie que personne ne te l'a pourrie.

    ensuite autre détail j'espère que ton Timer n'est pas une variable locale de ton OnStart() mais bien un membre de la classe ou sont défini OnStart et OnEnd... sinon dans certains cas obscures... l'instance peut etre "détruite" par le garbage collector avant meme que l'event ne se déclenche...

  12. #12
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    Sorry, effectivement, mais en cherchant sur la toile, je suis tombé sur des ricains qui ont eu le même genre de mésaventure ... et sans succès.
    La solution qu'ils ont choisi a été de threadé la chose...

    Même si je ne comprends pas pq ca bloque... et que l'autruche ne me plait pas
    (même si mon fils (2ans) me demande tous les soir de regarder une autruche <= hors sujet).
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    bien je n'ai jamais eu de souci a utiliser Timer dans System.Timers...

    si un jour il fonctionne et pas le lendemain, je serais amené à penser que c'est mon programme qui a un souci, et pas les timers qui ont un soucis... comme je te l'ai dit, le fait même que ton appli puisse démarrer en hosting sous VS est déjà suspet dans la mesure où tu teste un service Windows qui par essence NE PEUT PAS ETRE hosté et encore moins débogué.

    Si tu démarre bien sous VS alors tu dois avoir modifié toi même le code écrit par VS pour le démarrage en Service et dans ce cas, il se peut qu'un problème soit présent à cet endroit.
    Quand aux ricains ce ne sont pas des références non plus, ils ont souvent tendance à jouer l'autruche sans trop chercher...

  14. #14
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je suis tout à fait d'accord avec toi cinemania, ça ne devrait pas démarrer en étant hosté par VS.

    Je n'ai pas pensé à vérifier dans le main. Je vais checker ça aujourd'hui.
    Pour le machin des sleeps, je suis également d'accord avec toi, ces trucs là, ça pue (en gros hein^^).

    Enfin voilà, je check, j'investigue et je vous donne un feed-back.

  15. #15
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    Quand aux ricains ce ne sont pas des références non plus, ils ont souvent tendance à jouer l'autruche sans trop chercher...
    GRRR : Des à prioris comme ca ... ca me fait rire ... on globalise, c'est nul ...
    A ce jeux là : les francais sont des grenouille, les belges des nigaud (j'en suis un malgré là ou j'habite), les danois des sauvages (viking), les cathos des bornés, les marsiens des écolos, etc...

    J'ai déjà bossé avec des anglais, francais, américains, belges, suisses, marocains, algériens sénégalais, et ... ya des bons partout, des efficaces partout, des mauvais partout, des autruches partout etc.
    Donc les à prioris ... c'est juste un moyen facile de cataloguer les gens pour sa conscience personnelle ...

    Ma philosophie : juger de l'urgence d'une situation, dans l'urgence, il faut pouvoir réagir, être pragmatique, pour ensuite pouvoir prendre le temps de comprendre...
    Si on a le temps, c'est différent...

    Revenons à nos moutons :
    Quant au débugage de service web ... oui c'est tout à fait possible, (je le fais couramment et y'a deux méthodes :

    1. tu utilises l'instruction Debugger.Break(); qui va initier l'attachement de process dans la méthode start de ton service,

    2. tu le fais manuellement, ce qui t'oblige à mettre un bloqueur de code au démarrage du service,histoire d'avoir le temps d'attacher le process manuellement... (VS.net Menu Debug - attach to process etc)

    Et tu démarre le service ...

    Bien évidemment, il faut laisser les pdb dans le répertoire du service Windows, et arrêter le service entre chaque génération de projet.

    Autre info, pour installer le service Windows de ton projet, installutil.exe ... ou installe le via l'installer dont tu disposes dans le répertoire de génération de ton projet.
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  16. #16
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Bon voilà où j'en suis...

    Le mail me semble correct.

    Du coup, j'ai créé un nouveau projet, j'ai ajouté les composants nécessaires, recopier mon code et testé.

    Le résultat est le même. L'évènement du timer n'est jamais levé.

  17. #17
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Il est à noter que aujourd'hui, je ne peux plus lancé le service en étant dans visual studio.

    Il y a p-e du progrès !

    Demain matin, je ferai un restart du serveur sur lequel tourne le service... Avec windaube, on ne sait jamais ^^

  18. #18
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Restart du serveur effectué et pas d'amélioration.

    J'essaie de savoir ce qui pourrait faire qu'un timer dans un service ne réagisse pas mais je ne vois pas trop.

    Il y a bien le fait que si on prend le timer de l'espace de nom winforms, alors ça ne marche pas mais je n'ai pas pris celui-là.

    J'ai bien mis la propriété enabled à true.

    Quelqu'un voit autre chose à vérifier ?

  19. #19
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    pourrais tu zippé la partie main et la classe ou se trouve la déclaration du timer et des onstart ?
    ou coller ca dans le forum ?

    car là sans visibilité du code, on avance comment dire... dans le brouillard.

    benji_dv... j'ai bossé aussi avec hein... les aprioris ne viennent pas tous de préjugés. Et j'ai également été confronté à des passionnés qui cherchaient pas non plus, plus loin que le bout de leur nez, et ce contentaient très bien de solutions palliatives. Il ne s'agit pas toujours d'une question de temps, mais aussi de volonté. A force de revoir sans cesse le même comportement... tu fini par en tirer les conclusions qui s'imposent. En revanche je peux également dire, à leur décharge, que des développeurs Français arrogants, qui n'ont pas inventé l'eau chaude, j'en ai également vu des pleines brouettes. Mais là n'est pas tellement le sujet.

    pour les timer.sleep c'est pas tellement que cette solution "pue", c'est qu'elle n'est pas précise si la précision n'est pas un facteur déterminant dans ton problème, alors des timers avec System.Threading.Timer suffirons largement, mais là non plus je suis pas convaincu que ca fonctionnerait sans avoir vu ton code.

  20. #20
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je vais essayer de vous mettre ça...

    Mais va d'abord falloir que je vire les infos de connexion aux DB ^^

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment faire un Timer de fonction PORTABLE ?
    Par dieuP1guin dans le forum C
    Réponses: 3
    Dernier message: 04/07/2003, 10h44
  2. [horloge] conflit caractère / timer
    Par JeanJean dans le forum C
    Réponses: 10
    Dernier message: 09/05/2003, 23h47
  3. [] [Réseau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/01/2003, 22h19
  4. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  5. Timer en µsecondes
    Par Dagobert dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 25/11/2002, 00h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo