PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 24 → Sur android, Pb requete soap xml avec entete et un body xml mais ne fonctionne pas
Sur android, Pb requete soap xml avec entete et un body xml mais ne fonctionne pas
Débuté par dominique, 03 déc. 2018 02:33 - 4 réponses
Posté le 03 décembre 2018 - 02:33
Dans PostMan, j'exécute une requête soap et tout se passe bien, il me créé bien mon enregistrement sur mon système qui contient le webservice.

J'appelle à une url du type : http://monadresseip:8085/Proxy.ashx/soap/Page/CustomerCard
avec un entete du type :
Authorization ZKJKJMLLUIUEJDNCCFFTjZDI1ZTQ4OTYx
SOAPAction Create
Content-Type application/xml

et un body exemple du type :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wor="urn:microsoft-dynamics-schemas/page/CustomerCard">
<soapenv:Header/>
<soapenv:Body>
<wor:Create>
<wor:CustomerCard>
<cust_Description>My new customer test</cust_Description>

</wor:CustomerCard>
</wor:Create>
</soapenv:Body>
</soapenv:Envelope>

Comment je fais pour exécuter correctement cette requête sous Android avec Windev mobile 23 ?
J'ai essayé avec httprequête mais sans succès, il me dit "bad request". alors que sous PostMAN ou SoapUI, cela fonctionne bien, le système me renvoie un xml avec la création d'un client et son numéro.

Je ne peux pas voir ce qui est envoyé au serveur,

Si quelqu'un a un exemple de code avec l'envoie des header et d'un body xml

Merci !

Dominique
Membre enregistré
138 messages
Popularité : +1 (1 vote)
Posté le 04 décembre 2018 - 17:08
Bonjour Dominique,

il faut procéder de la manière suivante :

- Créer une configuration "iOS"
- Créer un test avec les types wsRequête et wsRéponse (https://doc.pcsoft.fr/fr-FR/?1000020577 / https://doc.pcsoft.fr/fr-FR/?1000020568)

Le type wsRequête permet de regarder ce qui est envoyé au serveur et éventuellement de le corriger en fonction de ce qui est vu via SoapUI ou Postman.

Une fois que ça fonctionne, tester le même code sous Android en enlevant les types wsRequête et wsRéponse.

Jérôme
Posté le 05 décembre 2018 - 05:25
Bonjour Jérome,

Merci pour la réponse.

Mais ensuite sur android comment remplacer les types wsrequetes et wsreponse qui ne fonctionnent qu'avec IOS ? pour que le code fonctionne

Je fais sur android le code suivant :
mais j'ai un résultat qui passe dans le info(rescode) mais il affiche un html avec un runtime error
et il ne créé pas l'enregistrement.
Alors qu'avec le meme body et les memes header dans postman ou Soap UI ca passe

Merci !

Dominique


sUrlServeurSOAP est une chaîne
sLogin est une chaîne
sPassword est une chaîne

sUrlServeurSOAP= "http://xxx.xxxip:Port/Proxy.ashx/soap/Page/CustomerCard"


sXMLSoap est une chaîne
sXMLSoap += [
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wor="urn:microsoft-dynamics-schemas/page/customercard">
<soapenv:Header/>
<soapenv:Body>
<wor:Create>
<wor:CustomerCard>
<wor:Description>Test description</wor:Description>
</wor:CustomerCard>
</wor:Create>
</soapenv:Body>
</soapenv:Envelope>
]

sMyheader est une chaîne
sMyheader = "Authorization: ZGFjOTk0YmEtZjVjYi00OTI3LTblablabla ; SOAPAction: Create"


SI PAS HTTPRequête(sUrlServeurSOAP,"",sMyheader,sXMLSoap,"text/xml","","") ALORS
Erreur(ErreurInfo(errComplet))
SINON

ResCode est une chaîne ANSI = HTTPDonneRésultat()
Info(ResCode)
FIN
Membre enregistré
138 messages
Popularité : +1 (1 vote)
Posté le 05 décembre 2018 - 09:04
Mais ensuite sur android comment remplacer les types wsrequetes et wsreponse qui ne fonctionnent qu'avec IOS ? pour que le code fonctionne


C'est très simple, il faut enlever de l'appel la variable de type wsRequête passé en premier paramètre et il ne faut plus récupérer le résultat avec une variable de type wsRéponse mais avec la variable initiale (celle que l'on aurait utilisée si le type wsRéponse n'existait pas).

Alors qu'avec le meme body et les memes header dans postman ou Soap UI ca passe


Pour savoir ce qui est vraiment envoyé sans utiliser le type wsRequête, il faut regarder ce qui est appelé via WireShark et le comparer à ce que l'on pense qui transit. On a souvent des surprises ! ;)
Posté le 06 décembre 2018 - 02:25
Merci Jérome !!