|
Web service + Serialise/Désérialise |
Débuté par Yves Roulet, 22 nov. 2006 17:58 - 8 réponses |
| |
| | | |
|
| |
Posté le 22 novembre 2006 - 17:58 |
Je recherche comment transmettre des données entre un serveur et des client mobiles. J'ai donc fait un web service qui tourne sous IIS et qui se presente comme ceci
///////////// PROCEDURE GETCLIENTSBI(n_id est un entier,b_client est un booléen, n_code est un entier)
st_client est une STCOL_CLIENTS tab_listeclient est un tableau de 0 STCOL_CLIENTS smachaine est une chaîne
SI b_client ALORS POUR TOUT CLIENTS AVEC "SOLID_ID >" + n_id + " ET SOCIETE = " + n_code FichierVersMémoire(st_client,CLIENTS) TableauAjoute(tab_listeclient,st_client) FIN SINON POUR TOUT CLIENTS AVEC "SOLID_ID >" + n_id + " ET CLIENTRESP = " + n_code FichierVersMémoire(st_client,CLIENTS) TableauAjoute(tab_listeclient,st_client) FIN FIN Sérialise(tab_listeclient,smachaine,psdBinaire) //ou psdXML
RENVOYER smachaine ///////////
si je mais le type psdBinaire le web service me tronque ma chaine, puisque le string XML ne suporte pas de données binaire, par contre si je mais le type psdXML je reçois un message mauvais format de sérialisation lors de la réceétion sur le mobile.
voici le code du coté client ////
smachaine est un TestWS.STGETCLIENTSBIResponse gst_client est un STCOL_CLIENTS gtab_listeclient est un tableau de 0 STCOL_CLIENTS
smachaine = GETCLIENTSBI(0,Faux,3)
Désérialise(gtab_listeclient,smachaine:m_GETCLIENTSBIResult,psdBinaire) // ou psdXML
POUR TOUT ELEMENT gst_client DE gtab_listeclient HLitRecherchePremier(CLIENTS,SOCIETE,gst_client:nSOCIETE) SI HTrouve(CLIENTS) ALORS MémoireVersFichier(gst_client,CLIENTS) HModifie(CLIENTS) SINON MémoireVersFichier(gst_client,CLIENTS) HAjoute(CLIENTS) FIN FIN /// l'appel au web service se fait dans la procédure GETCLIENTSBI
Qui à déjà utiliser les web service avec serialise et désérialise entre un serveur http et Windev mobile peut me donner un suggestions? Merci |
| |
| |
| | | |
|
| | |
| |
Posté le 23 novembre 2006 - 09:19 |
Bonjour, Tu peux essayer de transcoder les chaines en unicode avant de sérialiser le tout. De plus, si tu utilises les WebServices "made in Windev" dans l'application Mobile, j'ai remarqué qu'il faut transcoder en Unicode la valeur renvoyée par SoapDonneResultat ( XMLDocument(docres,AnsiVersUnicode(SOAPDonneRésultat(SOAPRésultatXML)))) dans la procédure généré par Windev côté mobie pour que ça fonctionne. Tu peux aussi jeter un oeil ici (http://forum.pcsoft.fr/post.awp…) et là (http://forum.pcsoft.fr/post.awp…)
Frédéric. |
| |
| |
| | | |
|
| | |
| |
Posté le 23 novembre 2006 - 09:40 |
Merci pour ton info, tu utilise donc la sérialisation xml et non binaire? as tu déjà essayer en binaire? |
| |
| |
| | | |
|
| | |
| |
Posté le 23 novembre 2006 - 10:36 |
En fait, je n'utilise pas la sérialisation du tout. J'ai fait celà "à la main", en concaténant les différentes informations avec un séparateur (RC le plus souvent). C'est surtout dû au fait que les fonctions sérialise/désérialise ne m'étaient pas du tout passé par la tête sur le moment
Frédéric. |
| |
| |
| | | |
|
| | |
| |
Posté le 23 novembre 2006 - 11:25 |
je n'ai pas de souci avec les web service, mon souci est avec sérialise et désérialise. cela evite d'ecrire pas mal de code. |
| |
| |
| | | |
|
| | |
| |
Posté le 24 novembre 2006 - 09:48 |
Bonjour,
Le XML a du mal avec les chaines binaires Personnellement je les encode en ANSI avant de mettre la chaine dans le fichier XML tu peux le faire avec la fonction ChaineANSI = Crypte(ChaineBinaire, "motdepasse", crypteRapide+crypteAnsi,Vrai)
Ensuite tu peux le mettre dans le fichier XML
En espérant t'avoir aidé
Marc |
| |
| |
| | | |
|
| | |
| |
Posté le 24 novembre 2006 - 13:44 |
| |
| |
| | | |
|
| | |
| |
Posté le 27 novembre 2006 - 10:26 |
Effectivement le transport d'une données binaire fonctione trés bien si ont crypte en ansi avant. L'unique point qui m'énerve, c'est que je n'arrive pas à désérialiser!!! Merci de ta suggestion |
| |
| |
| | | |
|
| | |
| |
Posté le 20 décembre 2007 - 12:39 |
En fait, le problème vient du transfert unicode - ansi et de la fonction desérialise :
il faut récupérer les réponses du service web en utilisant AnsiVersUnicode(SOAPDonneRésultat(SOAPRésultatXML))
le reste du traitement ne bouge pas, par contre, avant d'appeler la fonction désérialise, il faut faire un unicodeversansi(res:ResponseResult) (ou autre variable buffer qu'on utilise) car la fonction désérialise ne fonctionne apparemment qu'avec une chaine ansi, même sur pocket pc.
J'ai fait cela et mon code fonctionne correctement. |
| |
| |
| | | |
|
| | | | |
| | |
|