PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV (précédentes versions) → [V28] Urgent : pb lancement Webservice depuis Webdev
[V28] Urgent : pb lancement Webservice depuis Webdev
Débuté par bernard SOBRA, 28 nov. 2024 14:10 - 8 réponses
Membre enregistré
355 messages
Posté le 28 novembre 2024 - 14:10
Bonjour à tous,
J'ai l'habitude d'écrire des Webservices. J'en ai une collection dans mon projet qui s'exécutent tous parfaitement depuis l'explorateur (Chrome).
Quand je les appelle depuis une application bureau sous Windows, ils s'exécutent aussi très bien.
Mais quand je lance l'appel à l'un de ces WS depuis mon site écrit en Webdev, ils ne s'exécutent jamais, la variable de retour est "null".

// ********************************************************************************
// Sauvegarde de la table des références
// ********************************************************************************
St_WsResultat est un ST_WS_RESULTAT
St_WsResultat = DR_WS.FREF_SAUVE_TABLE(Glo_I8_ClientEnCours)
SI St_WsResultat.BIEN_PASSE = Faux ALORS
Info("Erreur lors de la sauvegarde de la table FREF", résultat .MESSAGE_ERREUR)
FIN
// Début de l'importation
............................


Le ws ne S'exécute jamais et la variable St résultat est toujours nulle.

Au secours, j'ai une dizaine d'appel au WS à faire, je galère, et c'est urgent maintenant.

Merci de votre aide, les amis.

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
78 messages
Posté le 28 novembre 2024 - 15:24
Bonjour

Je ne vois pas ou se trouve les erreurs, avant de le savoir, d'abords il faudrait que vous détectez les erreurs, de quoi il s'agit vraiment

Vous devrez écrire ce code

htRequête est un httpRequête
htRequête..URL = "Votre url de liaison"
htRéponse est un httpRéponse = HTTPEnvoie(htRequête)
IF ErreurDétectée THEN // EDD (11/24) : Instruction pour détecter les erreurs
Erreur(ErreurInfo(errComplet))
ELSE
Info(htRéponse..Contenu)
END

Ce code sait aussi les erreurs

St_WsResultat est un ST_WS_RESULTAT
St_WsResultat = DR_WS.FREF_SAUVE_TABLE(Glo_I8_ClientEnCours)
SI St_WsResultat.BIEN_PASSE = Faux ALORS
Erreur(ErreurInfo(errComplet))
FIN

NB : Si le retour a des erreurs, ce ne serait pas difficile de le résoudre

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy
Membre enregistré
355 messages
Posté le 28 novembre 2024 - 18:42
Merci de ta réponse, Niry, voila le code que j'ai posé dans mon site et qui s'exécute normalement.
htRequête est un httpRequête

htRequête..URL = "http://192.168.10.238/DR_WS_WEB/awws/DR_WS.awws?wsdl"
// Ou l'adresse de lancement : http://192.168.10.238/DR_WS_WEB/awws/index.htm
// J'ai essayé les deux
// Toi cela ne peux pas fonctionner, y'a un vpn de protection forticlient.


htRéponse est un httpRéponse = HTTPEnvoie(htRequête)
IF ErreurDétectée THEN // EDD (11/24) : Instruction pour détecter les erreurs
Erreur("Erreur ",ErreurInfo(errComplet))
ELSE
Info("Reponse correcte : ", htRéponse..Contenu)
END
Glo_ST_MonStResultat = DR_WS.CTRL_ARBO_CLIENT(Glo_I8_ClientEnCours)
Info(Glo_ST_MonStResultat.ERR_MESSAGE)


A la lecture de la réponse, c'est la réponse correcte qui s'affiche (pas d'erreur).
Mais le Webservice ne s'effectue pas.

D'autres idées ???

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
191 messages
Posté le 28 novembre 2024 - 21:39
Bonsoir Bernard,

Je ne vois pas trop l’intérêt d'utiliser la fonction HTTPEnvoie(). Surtout si le webservice a été importé dans le projet.

Par contre, avant de le consommer, il faut initialiser certaines valeurs :
WebService.Adresse = "http://192.168.10.238/DR_WS_WEB/awws/DR_WS.awws"

// Si la connexion est sécurisée, indiquer utilisateur et mot de passe
// DR_WS.Utilisateur = <utilisateur éventuel>
// DR_WS.MotDePasse = <mot de passe éventuel>

// Ignorer les certificat ?
// DR_WS.IgnoreErreur=httpIgnoreCertificatInvalide+httpIgnoreNomCertificatInvalide+httpIgnoreCertificatExpiré


L'utilisation de ErreurDetectee() doit être effectuée juste après l'appel de l'opération CTRL_ARBO_CLIENT
Glo_ST_MonStResultat = DR_WS.CTRL_ARBO_CLIENT(Glo_I8_ClientEnCours)
SI ErreurDétectée ALORS
Erreur("Erreur consommation : " + ErreurInfo(errComplet))
SINON
SI Glo_ST_MonStResultat.BIEN_PASSE ALORS
Info("OK")
SINON
Erreur("Erreur opération : " + Glo_ST_MonStResultat.ERR_MESSAGE)
FIN
FIN


Cdt
Fabrice
Message modifié, 28 novembre 2024 - 21:39
Membre enregistré
191 messages
Posté le 28 novembre 2024 - 22:19
Oups... Une erreur s'est glissée dans ma réponse précédente :

C'est pas WebService.Adresse mais DR_WS.Adresse :
DR_WS.Adresse = "http://192.168.10.238/DR_WS_WEB/awws/DR_WS.awws"
Membre enregistré
355 messages
Posté le 30 novembre 2024 - 10:34
Bonjour Patrice, merci de ton aide !

Voila la pièce de code modifiée (avec un autre WS).

MonStResultat est un ST_WS_RESULTAT
Str_AdresseWS est une chaîne = "http://192.168.10.238/DR_WS_WEB/awws/DR_WS.awws"
DR_WS.Adresse = Str_AdresseWS
DR_WS.IgnoreErreur=httpIgnoreCertificatInvalide+httpIgnoreNomCertificatInvalide+httpIgnoreCertificatExpiré

POUR TOUT F_CLIENT
Glo_I8_ClientEnCours = F_CLIENT.CLI_ID
POUR I_Annee = 2021 _À_ 2024
MonStResultat = DR_WS.MAJ_RESULTAT_DEPUIS_FEC(Glo_I8_ClientEnCours,I_Annee)
SI ErreurDétectée ALORS
Erreur("Erreur consommation : " + ErreurInfo(errComplet))
SINON
SI MonStResultat.BIEN_PASSE ALORS
Info("OK")
SINON
Erreur("Erreur opération : " + MonStResultat.ERR_MESSAGE)
FIN
FIN
TraceConstruit("ANNEE %1 CLIENT %2 : %3", I_Annee, Glo_I8_ClientEnCours, MonStResultat.ERR_MESSAGE)
FIN
FIN


En fait, le contenue de mon retour de WS (la variable MonStResultat) est toujours vide avec un MonStResultat.BIEN_PASSE = faux.
Je pense qu'il me manque encore quelque chose.....

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Message modifié, 30 novembre 2024 - 10:36
Membre enregistré
191 messages
Posté le 30 novembre 2024 - 11:33
Bonjour Bernard,
Difficile de répondre, n'ayant pas connaissance de la structure ST_WS_RESULTAT renvoyée par le webservice (JSON, XML,... ?)
S'agit-il d'un webservice SOAP, REST ?

Dans un premier temps, essayes de stocker le résultat dans une chaine, plutôt que dans la structure ST_WS_RESULTAT. Si c'est du XML ou du JSON, tu devrais obtenir quelque-chose de "lisible"

Ensuite, dans la mesure où aucune ErreurDetectée n'est remontée lors de sa consommation, il est possible qu'une exception se produise dans le webservice lui-même, d’où un retour "vide"
Il faudrait mettre en place des logs dans ce webservice afin de tracer précisément (ligne par ligne) le code exécuté dans les opérations.

Fabrice
Message modifié, 30 novembre 2024 - 11:48
Membre enregistré
355 messages
Posté le 02 décembre 2024 - 10:26
Merci Fabrice de tes bons conseils.
Ces web services fonctionnent parfaitement quand on les lance depuis Windows. Avec une ligne de commande très simple.
Ces web services fonctionnent parfaitement quand on les lance depuis. Depuis La Dédiée Sous chrome.
Mais l'appel au web services ne fonctionne pas depuis le site. Pourtant, le site est sur le même serveur que les web services.
C'est à n'y rien comprendre

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
191 messages
Posté le 02 décembre 2024 - 11:24
Bonjour Bernard,

C'est étrange car je ne rencontre pas ce problème

J'ai également un webservice SOAP et un site web (les 2 développés avec WD2024) sur le même serveur IIS et je te confirme que j'accède bien au webservice depuis le site web en local

En revanche, même si elle s’effectue en localhost ma connexion est sécurisée (https)
==> DR_WS.Utilisateur + DR_WS.MotDePasse sont renseignés
Je n'ai jamais testé une connexion sans SSL donc je m'éloigne peut-être du sujet. Néanmoins, si tu décides de la mettre en œuvre, saches qu'il faut activer l’authentification de base sous IIS et Exiger SSL dans les paramètres du webservice

Si ton serveur est IIS, il faudrait aussi vérifier les logs... généralement situés dans \inetpubs\logs\LogFiles