Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 23-12-2009 11:23:03

laurent  
1000
Date d'inscription: 11-12-2009
Messages: 33
Pépites: 177
Banque: 0

[RESOLU] Webservice : utilisation de tableau en retour d'une fonction

bonjour,

je travail en 10.2.1
je crée un proxy a partir d'un ficher WSDL
j'utilise pbsaopclient

Le fichier WSDL m'est fourni par un service extérieur donc je ne le domine pas

dans ce fichier on définit une fonction simple (helloword) qui à une valeur de type string en entrée et retour une valeur de type string en sortie.

on déploie le tout dans pb : pas de soucis le proxy bien généré , la fonction aussi et les structures  liées aussi.

Par contre si la fonction doit renvoyer un tableau la cela coince.
La fonction déja est défini avec en valeur retour "any" au lieu du nom d'une structure de données
De plus la structure devant contenir la définition du tableau ne posséde pas de non de champs.

comme nous possédons les licences pour obtenir pb11.5 j'ai télechargé la version, migré cette application et effectué le même test avec la version pbsaopclient adéquat.
Le problème est strictement identique

Ou est le problème à votre avis :
dans les limites du pbsoapclient ou dans la définition du fichier wsdl.

Merci pour vos réponses
Cordialement
Laurent

Dernière modification par laurent (07-01-2010 11:44:21)

Hors ligne

 

#2 24-12-2009 13:25:33

elfeliz  
Bienfaiteur du site
Award: bf
Lieu: Liège, BE
Date d'inscription: 23-06-2009
Messages: 94
Pépites: 471
Banque: 0

Re: [RESOLU] Webservice : utilisation de tableau en retour d'une fonction

Salut,


Alors, j'ai pas forcément bien compris ton soucis... mais je me lance

Il y a dans l'aide de pb10.5 (Chap "Generating web service proxy objects"...) un paragraphe qui précise que si une fonction possède un array en signature, PB la transforme automatiquement en ANY.
La correspondance est vraie aussi pour le wsdl : s'il y a un tableau fixe et à une dimension, PB le transforme en tableau dynamique à une dimension. Les tableaux multi qui seraient dans le wsdl provoqueraient une erreur pure 'return type invalid' ; tu ne saurais déployer.

Cela pour "faire passer" le array qui, à priori, risquerait de ne pas être accepté tel quel par le XML : il ne reconnait que les tableaux dynamique à une dimension...

Mon anglais poussif me porte à le comprendre ainsi, en tout cas.

Si c'est bien ça, ta variable réceptrice (celle qui va ramasser le "any-array" sur le client) doit être du type approprié.
Selon moi, ce devrait être un array... pas une structure...

Si le problème est là, tu es confronté non pas à une limite du pbsoapclient mais à la limite même du webservice, en général...
C'est basé sur XML, il faut plier tes variables PB à ses limites.


J'espère que je ne raconte pas n'importe quoi

J'en appelle d'ailleurs à nos camarades de jeux pour confirmation et/ou corrections 


A +


No prob, just Pb !

Hors ligne

 

#3 07-01-2010 08:55:53

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Webservice : utilisation de tableau en retour d'une fonction

Salut Laurent,

Je creuserai ta réponse après avoir reçu ton mail comme convenu.

Mais pour faire avancer le schmillblick en attendant, dans la doc il est dit :

...To invoke a Web service method, the proxy object must contain the following information:
...
An instance variable for each returned structure array, since all returned arrays are any
...

En substance, il faut dans ton proxy une variable d'instance pour chaque tableau de structure, puisque ceux ci sont retournés sous forme de any.

Sinon, puisque vous pouvez passer sur PB11.5 ( et qu'a priori vous êtes sous windows) avez-vous testé le .Net Web service engine à la place du EasySoap Web service ? Car, il est plus récent et support certains types en plus (le type XML array par exemple) ainsi que les header (pratiqsue pour la gestion de la sécurité).
Bien sur la mise ne oeuvre du .Net Web service engine peut sembler un peu plus complexe, mais il suffit de suivre la doc à la lettre :
1 - Avoir le wsdl.exe (inclus dans le .Net SDK lui même téléchargeable dans MSDN) sur le poste de dev.
2 - Avoir le framework .Net dans le rep de l'appli sur les postes clients (ben oui c'est du Grosoft)
3 - Avoir la DLL (c'est l'assembly .Net) générée automatiquement par le Web Service Proxy Wizard de PB dans le rep de l'appli sur les postes clients.
4 - Avoir Sybase.PowerBuilder.WebService.Runtime.dll et Sybase.PowerBuilder.WebService.RuntimeRemoteLoader.dll  dans le rep de l'appli sur les postes clients.


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#4 07-01-2010 09:30:47

laurent  
1000
Date d'inscription: 11-12-2009
Messages: 33
Pépites: 177
Banque: 0

Re: [RESOLU] Webservice : utilisation de tableau en retour d'une fonction

Bonjour,
Et bonne année à toutes et tous ceux qui liront ce message

Je te remercie elfeliz pour ta réponse.
J'ai refait pas mal de test dernièrement.

Le fichier wsdl qui m'est fourni est construit à partir d'un logiciel cxf version 2.06

Je peux affirmer plusieurs choses sur la constitution des fonctions et structures que je récupère

Quelque soit le type de paramètre mis en entrée d'une fonction est bien traduit par pb (élément simple, élément liste ou élément structure)
Une fonction créée avec un paramètre en sortie de type autre qu'une liste est bien traduit par pb
Une fonction créée avec un paramètre  en sortie de type liste est traduit en any
Une fonction créée avec un paramètre  en sortie de type structure est bien traduit par pb. Cette structure peut comporter des types liste
Quand je dis bien traduit par pb c'est que lors du déploiement les fonctions et les structures que l'on trouve dans le web service sont bien écrites.

Maintenant fort de ces traductions bien réussies  je pensais que l'appel des différentes fonctions allait fonctionner.
Et la c'est comme le temps d'aujourd'hui c'est la glissade.
La fonction simple (exemple Helloword) a fonctionné lorsqu’elle était seule dans le web service.
Dès qu’il y a d'autres fonctions cela ne marche plus.

On m'a dit (le constructeur du fichier wsdl) qu'il avait oublié de mettre "strict" en définition du paramètre retour (par défaut à chaque régénération son logiciel met "no strict")
Depuis j'attends une autre version du fichier wsdl.

Ce que je cherche à savoir après tous ce laïus c'est si quelqu'un à déjà fait fonctionner un web service avec une fonction qui à en retour une structure qui possède des éléments de type liste.

Car j'ai la douce sensation que l'on me balade avec la création du fichier wsdl en me disant que le problème vient de pb
Donc je cherche des éléments probants pour contredire car je ne veux et peux pas contredire quelqu'un si je n'ai pas d'argument à fournir.

Ce que j'aimerais savoir aussi c'est s'il n'existe pas des différences d'interprétation dans pb en fonction du logiciel qui génère le fichier wsdl.

Merci à tous et encore bonne année

Laurent

Hors ligne

 

#5 07-01-2010 11:43:09

laurent  
1000
Date d'inscription: 11-12-2009
Messages: 33
Pépites: 177
Banque: 0

Re: [RESOLU] Webservice : utilisation de tableau en retour d'une fonction

Re bonjour,

Nouveau message dans la foulée pour dire que le problème ne vient pas de pb mais de la génération du fichier wsdl
Ne me demandé pas comment il faut le faire je ne sais pas car je n'en suis pas l'instigateur.
Tout ce que je sais c’est que la personne qui a écrit le wsdl c’est appuyée sur la façon qu’elle connaissait lors d’une utilisation avec un autre client (lequel ??),  et que cette façon était inappropriée pour pb.
En insistant elle à fait différent test d’écriture et on a trouvée la bonne.
Je peux donc  certifier qu‘avec la version 10.2.1 je peux appeler une fonction qui retourne une structure qui contient des éléments listes.   
Qui en aurait douté  de toute façon, surtout pas toi Chrnico qui sait que rien n’est impossible pour pb.

Merci  à tous et à une prochaine
Laurent

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22