Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Outils > XMLRAD
XMLRAD Environnement de développement Web XML/XSL. Avant de poster -> F.A.Q XMLRAD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/07/2006, 11h27   #1
Membre confirmé
 
Avatar de Jeweller
 
Inscription : août 2003
Messages : 354
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 354
Points : 226
Points : 226
Par défaut WebServices et OutputParams

Bonjour!
Je souhaite créer une application (XMLRAD2005) qui fournisse un ensemble de service Web. Il n'y aura donc aucune interface graphique. J'aimerais créer une action de login. Pas de problème pour créer ce XMLService, pour le publier et définir ses paramètres d'entrées-sorties (nom/mdp -> n° session qui sera à utiliser pour executer les autres servcies).
Mon problème est que lorsque je transmets un nom et un mot de passe (via une requete SOAP (composant HTTPRIO sous delphi, ou via un XMLC_OUTPUTFORMAT=SOAP), le résultat renvoyé n'est pas simplement la valeur de ma session (présent dans une entrée du context), mais l'ensemble de ma grappe XML... Comment paramétrer mon application pour qu'un WebService réponde à un requete SOAP par une simple chaine de caractère?
J'ai biensur positionné dans OutputParams le nom de l'entrée du context qui possède la valeur, mais il ne semble carrément pas en tenir compte... Il y a peut etre un XPath à renseigner qqs part, mais je n'ai pas trouvé!
Je ne suis pas encore un grand habitué des WebServices, il y a surment un truc tout bete, pcq ca me parait élémentaire comme fonction

Michael
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2006, 10h57   #2
Membre confirmé
 
Avatar de Jeweller
 
Inscription : août 2003
Messages : 354
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 354
Points : 226
Points : 226
En cherchant un peu je me suis rendu compte que c'etait systématiquement tout le document XML qui etait renvoyé. Le framework ne tiens pas compte des OutputParams (à part pour générer le WSDL).
Donc la solution si l'on ne veut renvoyer qu'une seule valeur, est simplement de créer une document XML avec un seul élément portant le nom du parametre (comme ce qui est fait pour la démo nommé Calc).
Par contre je n'ai pas trouvé comment typer les valeurs de retour... Peut on définir le type (autre que xsd:string) des paramètres de sortie ?

Michael
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2006, 11h07   #3
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
tu peux donner les examples de ce qui est retourné et de ce quie tu attends ?
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2006, 09h00   #4
Membre confirmé
 
Avatar de Jeweller
 
Inscription : août 2003
Messages : 354
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 354
Points : 226
Points : 226
OK.
Pour les champs de type string, pas de soucis, on déclare ses paramètres en OutPutParams et on a le bon resultat:

Code :
1
2
3
4
5
6
7
8
 
<SOAP-ENV:Envelope ...>
	<SOAP-ENV:Body>
		<tns:DoLoginResponse>
                                 <SESSIONID>XXXXXXXXXX</SESSIONID>
             	</tns:DoLoginResponse>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Ca fonctionne tres bien avec un simple HTTPRIO.
Dans d'autres cas, je souhaite renvoyer par exemple un ensemble de données ("dataset xml"). Mon OutPutParam est déclaré de la même façon et donc dans le WSDL j'ai toujours (si mon param est EQUS):

Code :
1
2
3
4
5
6
 
...
             <message name="TagExportResponse">
		<part name="EQUS" type="xsd:string"/>
	</message>
...
Alors que la réponse est bien plus complexe:

Citation:
<SOAP-ENV:Envelope ...>
<SOAP-ENV:Body>
<tns:TagExportResponse>
<EQUS>
<EQU>
<ST_CODLON>XXXXXX</ST_CODLON>
<ST_DESEQU>RALENTISSEUR</ST_DESEQU>
<ID_CODGES>G11</ID_CODGES>
</EQU>
...
</EQUS>
</tns:TagExportResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Cela dit l'échange fonctionne, mais le logiciel client n'a aucun moyen de savoir réellement quel type de donnée va être retourné. Je pourrais vous en dire un peu plus dans qqs temps, le logiciel client n'est pas finalisé (.Net pour PDA). Mais j'avais fait des essais il y a longtemps (en version 6 je crois) en remplissant un ClientDataSet et ca fonctionnait bien, donc je ne suis pas inquiet.

Michael
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2006, 17h15   #5
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
je pense que ca va dépendre de ton binding-style (rpc ou document)
le duxième exemple doit être en mode document = document XML qu'il faut parcourri coté client.
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 15h34   #6
Membre confirmé
 
Avatar de Jeweller
 
Inscription : août 2003
Messages : 354
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 354
Points : 226
Points : 226
Coté client?? pas sur...
Par contre j'ai vu que le WSDL pouvait etre générer en position binding-style à document si dans le context "BindingStyle" est à "document" justement.
Existe-il de la doc sur cela ?? Comment générer un wsdl qui va bien... j'imagine qu'il faut créer les XSD qui correspondent aux services... pas facile!
Je n'ai rien trouvé sur le site xmlrad, pourtant le framework parait avoir déjà prévu tout ces cas de figure... Comment faire pour renvoyer un véritable dataset en réponse soap ? Faut-il ajouter la description du schema "à la main" dans l'output ?

Michael
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 16h30   #7
Membre confirmé
 
Avatar de Jeweller
 
Inscription : août 2003
Messages : 354
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 354
Points : 226
Points : 226
Et en plus c'est tres nul, le XSD n'est importé que si le WSDL ne décrit qu'une seule opération (un seul XMLService)... A quoi ca sert ????
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2006, 09h27   #8
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
Si j'ai bien compris tu veux le Schema pour que coté client il puissent le parser autoamtiquement poru le remplir dans un DataSet ?
c'est toujours ton client .NET ?
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2006, 09h50   #9
Membre confirmé
 
Avatar de Jeweller
 
Inscription : août 2003
Messages : 354
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 354
Points : 226
Points : 226
Dans le mille x2!
J'aimerais envoyer un ensemble de donnée (en gros le resultat d'un simple DBExtract) via le WebService (interface d'export). Mais du coté .NET je n'y connais pas grand chose et effectivement la parse automatique echoue car le schema renvoyé n'est apparement pas correct (?)! Je ne sais pas si c'est possible de le faire manuellement (certainement)? De leur coté, ils créent ce qu'ils appellent un "proxy"(?) mais l'appel de l'opération sur le webservice echoue si l'élement renvoyé n'est pas une simple valeur mais un ensemble de donnée.
Donc j'ai décris un XSD le plus proche possible de ceux généré automatiquement par VS dans ce cas, mais cela ne fonctionne pas non plus. Si tu me dis qu'il y a d'autres solutions sous VS je suis preneur, j'ai du mal à croire qu'il ne soit pas capable de lire une grappe XML depuis un WebService même si le paramètre est décris comme un xsd:string. L'idée finale etant simplement de récupérer une liste de données sur un PDA depuis une application XMLRAD. J'esperais qu'en qqs clic sous XMRAD le webservice soit développé, mais au lieu d'y passer qqs heures, j'y ai déjà passé déjà 2 jours!
Si tu as des infos/astuces/exemples coté VS, je les transmets volontier à mon client ;-)
Michael
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2006, 14h56   #10
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
bon effectivement y a 2/3 trucs qui vont pas du tout pour que ce soit correct.
ca demande pas mal de travail pour la mise en conformité pour être appelé par .NET
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2006, 15h07   #11
Membre confirmé
 
Avatar de Jeweller
 
Inscription : août 2003
Messages : 354
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 354
Points : 226
Points : 226
Aie Aie Aie
Le wsdl généré en bindingstyle document ne parait pas correct non plus... l'élément "ServiceNameResponse" est vide, la description du shéma n'y est pas imbriqué mais est à la suite!
Ca veut dire que pour mon projet (mise en production debut septembre), je vais devoir renvoyer du CSV ou un autre format dégradé (en esperant que ca ca marche!) ? Dommage...
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2006, 16h03   #12
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
tout dépend du niveau d'exigence pour le client.
en .NEt tu peux quand invoquer ton service soit en SOAP soit en XMLC_OutputFormat=XML
puis parser le contenu...
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2006, 09h03   #13
Membre confirmé
 
Avatar de Jeweller
 
Inscription : août 2003
Messages : 354
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 354
Points : 226
Points : 226
Ben disons que renvoyer bcp de lignes en CSV c'est pas génial et surtout on refait un saut de 10aines d'années en arrière! Et puis en XMLC_OUTPUTFORMAT=XML c'est plus du WebService!
Je pensais qu'une application XMLRAD etait "nativement" un WebService et je m'en ventais (XMLRAD aussi d'ailleurs, non?), mais ce n'est pas le cas à mon sens.... en tout cas je ne m'aventurerais plus sur ce terrain (mais je crois que c'est trop tard). Je risque de devoir baisser mon pantalon devant mes responsables... -ca m'apprendra à ne pas vérifier!-
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2006, 09h52   #14
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
Je peux te fournir un patch non officiel pour que le Service soit invocable par VS.NET d'ici quelques jours si ca t'interesse...
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2006, 10h03   #15
Membre confirmé
 
Avatar de Jeweller
 
Inscription : août 2003
Messages : 354
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 354
Points : 226
Points : 226
Quand tu dis invoquables par VS, tu entends par ce fait que je pourrai lui envoyer un ensemble de données XML (resultat d'un DBExtract)?
Oui, et comment que ca m'interesse!!
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h09.


 
 
 
 
Partenaires

Hébergement Web