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

C# Discussion :

Serveur web dans un service


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Points : 49
    Points
    49
    Par défaut Serveur web dans un service
    Bonjour à tous,

    Je dois créer un petit service Windows faisant tourner un écouteur Http (à priori HttpListener fera tres bien le job) afin de rester à l'écoute de requete et de déclencher des actions selon les ordres reçus....

    Je n'ai jamais encore joué avec les services Windows.
    J'ai effectué avec succès le tuto suivant https://docs.microsoft.com/fr-fr/dot...onent-designer et j'ai bien un service qui s'installe et tourne dans Windows

    Je me pose donc désormais la question de la conception du projet.
    Je veux dire par là, où suis je censé lancer le HttpListener ?

    Je peux par exemple le faire le Main() de Program.cs mais je peux tout aussi bien lancer un thread enfant (pour rendre la main) dans le OnStart() de Service.cs

    Quelle est la bonne pratique ?
    Vos conseils sont les bienvenus

    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le mieux est de lancer un thread depuis le onstart du service

    pour des choses aynchrones (peut etre le cas du httplisterner) le thread de démarrage n'a plus rien à faire après le démarrage de ces choses, s'arrête, et le service s'arrête aussi du coup, auquel cas un manualresetevent avec un waitone avant la fin du thread permet de laisser le thread en vie (et on peut alors faire .set dans le onstop)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    Merci pour cette réponse
    Ca rejoint ce que j'envisageais de faire....

    Par contre, quand on parle du thread de démarrage, il s'agit duquel ?
    Celui qui fait tourner le main() du program.cs et qui lance ensuite le thread de la classe service ?

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    moi je parlais de celui qui va te servir à faire démarrer ce que tu dois faire, pas de celui qui fait onstart
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    Super et merci

    Tout tourne comme je le souhaite, je parviens à démarrer mon service, ce dernier inscrit dans les journaux Windows ce qu'il fait et où il en est. Il lance dans un thread séparé mon serveur web qui notifie ma classe service de son état (Idle, Listening, ProcessingRequest)
    Ainsi, dans le OnStop, selon l'état de mon thread serveur, je le ferme différemment. En effet, s'il est listening je peux le tuer avec un Abort (Car l'appel à HttpListener.GetContext() est synchrone et bloque l'exécution de mon thread qui reste à attendre une requête). Par contre, s'il est ProcessingRequest, je lui donne l'ordre de se fermer lui même à la fin du traitement de la requête en cours, pour ne pas le tuer sauvagement.....


    Une dernière question concernant le service. Où puis je configurer les propriétés de reprise en cas de crash ? Dans l'interface Windows des propriétés d'un service, je peux le configurer manuellement pour redémarrer en cas de défaillance. Ne puis je pas positionner ces valeurs dans mon projet ?

    Bonne journée

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/06/2016, 12h24
  2. Intégrer serveur web dans une application c#
    Par CARNIBAL dans le forum Silverlight
    Réponses: 6
    Dernier message: 18/09/2009, 15h25
  3. Un serveur web dans son programme ?
    Par kedare dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 21/03/2007, 12h54
  4. [IIS] telechargement PHP dans le serveur web IIS
    Par paradoxham dans le forum IIS
    Réponses: 13
    Dernier message: 22/03/2006, 11h25
  5. [EasyPHP] EasyPHP : utilisation en serveur web dans un réseau local
    Par thierry198 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 16/01/2006, 16h06

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