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

Dotnet Discussion :

Service windows et thread


Sujet :

Dotnet

  1. #1
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Service windows et thread
    Bonjour
    J'ai une question qui me taraude l'esprit !
    J’ai un service Windows qui fonctionne normalement, il se lance et exécuté sa tache toute les 2mn, les données de base sont extraite d'une base SqlServer.
    Quand la base présente 2 enregistrement, le service fonctionne par contre dés qu'on dépasse un temps de traitement, le service tombe.!

    le Onstop() est appelé toutes les 30 seconde .

    Question : Comment désactiver cet appel des 30 seconde et dire au service qu'il doit faire la totalité es traitement, après il peut appelé le OnStope() ?

    J’espère que je suis assez explicite !


    Merci @ vous

  2. #2
    Membre habitué Avatar de LeCygne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2010
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2010
    Messages : 91
    Points : 159
    Points
    159
    Par défaut
    Quand le

    OnStop() est une méthode appelée lorsque le Service Controle Manager (SCM) reçoit une demande d’arrêt.
    L’arrêt au bout de 30 secondes est a priori, du à un timeout positionné sur le démarrage du service. Ce comportement à été choisi par défaut car le démarrage d'un service doit être rapide et ne pas s’éterniser.

    Avant d'appeler OnStop(), le SCM vérifie la valeur de CanStop : Si CanStop est vrai, le SCM appelle OnStop(). Sinon, non.

    La bonne pratique voudrait que, si votre traitement dure longtemps (plus de 30s), vous démariez un thread qui fasse le traitement et rendiez immédiatement la main alors que ce thread continue son exécution.

    Si toutefois, vous ne désirez pas faire de thread, vous pouvez soit :

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 64
    Points : 91
    Points
    91
    Par défaut
    Salut,

    les 30 secondes sont le timeout par défaut de démarrage du service windows.
    D'un point de vue "philosophique", la récup de données dans la base n'est plus de l'ordre du démarrage mais du traitement.
    2 solutions, sans tout casser ce qui est déjà fait :
    - au lieu de démarrer le service windows toutes les 2 minutes, tu le laisses tourner tout le temps (démarrage et arrêt avec le système) ; un timer va déclencher le traitement toutes les 2 minutes ;
    - idem mais au lieu d'effectuer le traitement dans le processus du service, tu créés un exe qui va chercher les données dans la bdd, et ton service se contente de lancer cet exécutable toutes les 2 minutes (ce que je ferais, personnellement).

    EDIT:
    En gros le principe, je ne sais pas si c'était clair, c'est que ton traitement ne soit pas directement effectué dans la phase de démarrage du service (sinon si ce traitement prend plus de temps que le timeout, OnStop() sera appelé avant la fin). Donc le principe c'est que le timer te permette d'effectuer tout ça dans un autre thread, voire dans un autre processus (autre exe).

  4. #4
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Merci
    Bonjour
    Désolé du retards, je comprend mieux l'approche, je reviens vers vous dés que je peux.
    Merci @ vous

Discussions similaires

  1. [WinService][C#] Comment déployer un service windows ?
    Par sokette dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/04/2005, 16h38
  2. Planifier le démarrage d'un service Window
    Par tscoops dans le forum Windows XP
    Réponses: 2
    Dernier message: 29/03/2005, 14h56
  3. [WD7.5] Service Windows
    Par cqfd dans le forum WinDev
    Réponses: 1
    Dernier message: 29/03/2005, 08h58
  4. [VB6]Arreter un service windows
    Par bouboussjunior dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/10/2004, 17h03
  5. [C#] Icône, barre des tâches et Service Windows
    Par SErhio dans le forum Windows Forms
    Réponses: 17
    Dernier message: 03/09/2004, 12h56

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