BeginEndContext de HTTPListener ne réagit pas au sein d'un service Windows
Fermé
Razz999
Messages postés
4
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
16 avril 2021
-
Modifié le 16 avril 2021 à 16:24
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 - 16 avril 2021 à 22:44
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 - 16 avril 2021 à 22:44
A voir également:
- BeginEndContext de HTTPListener ne réagit pas au sein d'un service Windows
- Windows ne démarre pas - Guide
- Clé de produit windows 10 gratuit - Guide
- Montage video windows - Guide
- Service spouleur - Guide
- Windows 10 gratuit - Accueil - Mise à jour
1 réponse
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
16 avril 2021 à 16:48
16 avril 2021 à 16:48
bonjour,
comment as-tu vérifié que le service écoutait? la session a-t-elle été acceptée par le service?
comment as-tu vérifié que le service écoutait? la session a-t-elle été acceptée par le service?
16 avril 2021 à 21:42
J'ai vérifié que le service écoute sur le bon port en tapant la commande suivante dans une fenêtre CMD de Windows :
telnet localhost 30010
parce que je développe sur mon ordinateur local. Lorsque j'exécute cette commande le curseur de cette fenêtre CMD, vide la fenêtre et va s'installer en haut et à gauche. Pour obtenir la commande « telnet », on doit activer cette option dans les paramètres de Windows. Cette commande fonctionnera partout. C'est une commande livrée par Microsoft.
Voici le code simplifié de mon service :
Le bout de code problématique se trouve dans la méthode « OnStart ». Elle ne génère aucune erreur, ni exception. C'est seulement que lorsque l'écoute débute, elle n'ouvre pas un « thread » en appelant la méthode « ListenerCallback ».
Ce code en C# fonctionne sans aucun problème depuis 3 ans en Windows Forms Application. Le code de la méthode « OnStart » est simplement écrit dans l'événement « OnClick » d'un bouton par exemple.
Tu peux le copier et l'essayer en quelques minutes. Si tu t'efforces de m'aider, tu as mon code en cadeau! :-)
J'ai aussi réalisé un code avec des événements « Wait », qui fonctionne en Windows Forms Application, mais non en Windows Service. Il réagit de façon identique. Il n'écoute pas (le petit garnement!).
Passe une belle journée mon ami! :-)
16 avril 2021 à 22:44
Tu fais l'hypothèse que tout se passe bien, et que le service n'écoute pas, ou ne récupère pas le message SOAP. Supposons plutôt qu'il ne le reçoive pas.
Je travaillerais ces pistes, pour récolter des information complémentaires:
1) le service a-t-il la même identité et les mêmes privilèges que l'application Forms?
2) tester avec http au lieu de https (l'app Form et le service)
3) quel client SOAP utilises-tu? ne te donne-t-il aucune possibilité de diagnostiquer ce qui se passe, où cela coince (TCPIP, SSL, HTTP, ...)?
4) il vaut mieux éviter de tester avec Telnet. à fortiori quand tu utilises SSL. si tu ne veux pas développer un client de test, il est simple d'utiliser PowerShell pour établir une connexion, avec ou sans SSL. Cela te donnera un meilleur contrôle de ton test. Comme tu fais de l'HTTP, utilise également un navigateur pour tester l'établissement d'une connexion et un échange HTTP, avec et sans SSL De nouveau, bien sûr, teste l'app Forms et le service.
5) tu as sans doute déjà vérifié via netsh http show sslcert
Modifié le 16 avril 2021 à 21:53
J'ai aussi testé cette version en Windows 7, 8 et 10. Ça fait le même effet!
C'est censé accepter un message SOAP, mais pour les besoins, n'importe quel chaîne de caractères serait très satisfaisante à cette étape-ci.
Afin de voir où ça bloque, j'ai écrit un fichier temporaire sur le disque. Naturellement, il ne dépasse pas le « BeginGetContext » en exécution. J'ai tenté de voir s'il entrait au moins une fois dans la méthode « ListenerCallback », en écrivant un autre fichier, mais jamais il ne l'écrit. Donc, il n'entre même pas à l'intérieur de cette dernière méthode.
Si tu veux écrire un fichier sur le disque, tu peux copier et coller le code suivant où tu voudras :