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 08/08/2006, 16h47   #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 Invoquer un WebService XMLRAD depuis VS.NET

Bonjour,

Je n'ai ni ne connais véritablement Visual Studio .NET mais j'ai un client qui rencontre des difficultés à communiquer avec nos webservcies développés sous XMLRAD2005/Delphi7.
Quelles indications puis je lui donner pour l'aider à développer son application ? Il tombe apparement systématiquement sur une page d'erreur HTML (Action non trouvée). De mon coter j'ai fait des tests avec un petit client HTTPRIO sous Delphi et ca passe bien. Quelles sont les étapes à suivre ?

Michael
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 17h41   #2
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 viens de voir qu'en fait XMLRAD se base sur le fait qu'il y ait "<SOAP-ENV:Envelope" dans la requête envoyé par le client ce qui est le cas pour HTTPRIO mais pas pour .NET.

il faudrait que tu modifies XMLApp pour accepter aussi <soap:Enveloppe pour .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 08/08/2006, 17h45   #3
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, mais j'ai pas .Net. Je ne sais donc pas ce qu'il envoie et donc ce à quoi je dois m'attendre dans XMLApp... Tu as un exemple de requete sous la main ?
Mais ca voudrait dire qu'un WebService XMLRAD n'est pas "universel", ou bien c'est la requete SOAP de VS.NET qui ne l'est pas ?

Michael
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 17h56   #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
Bon j'ai remplacé la ligne qui va bien par ca:
Code :
1
2
3
4
 
if (Pos('<SOAP-ENV:Envelope', ContentStr) > 0) 
or (Pos('<soap:Envelope', ContentStr) > 0 ) 
or (Pos('<env:Envelope', ContentStr) > 0 ) then
Je vous tiens au courant si ca suffit

Michael
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 08h55   #5
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 non ca suffit pas!
Citation:
"R?f?rence ? un pr?fixe d'espace de noms non d?clar? : 'SOAP-ENV'"
J'imagine que VS attend une réponse avec soap:envolope et non pas soap-env !! Mais ca, ca devient plus une "petite" modif du framework!
Je ne veux pas jeter la faute sur VS ou sur XMLRAD, mais quand même, dire que XMLRAD fait du Webservice sans vérifier que ca fonctionne dans ce cas c'est un peu gros!
Je vais etre obligé vu l'urgence de faire le necessaire. Peut on espérer que ca passe dans le haut de la wishlist ?

Michael
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h09   #6
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
Malheureusement c'est ce qu'on appelle une heuristique.
la problématique est du fait que le point d'entré ezt le même pour des requête zHTTP classiquez venant du navigateur et des requêtez SOAP d'un client.
il faut donc un critère permettant de différencier les 2 types de requêtes. malheureusement dans les heders HTTP rien n'est fixé pour annoncer comment interpréter le contenu. c'est a cela que sert le if pour invoquer ou non InitSoapRequest.
Un choix a été fait à l'époque (ou d'ailleurs les webservices était seulement émergeant, .NET n'étant même pas sorti)
XMLRAD a plus souvent était consommateur de Webservices (client) que Véritable serveur.
Bref le critère de distinction est pas si évident que cela a faire. peut être qu'une réarchitecture sera nécessaire...
__________________
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, 10h41   #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
Disons qu'une "petite" modif permettrait de prendre en compte ce cas (VS est qd tres répendu!). Je l'ai faite et ca fonctionne bien (en manuel depuis IE, depuis app delphi avec HTTPRIO, et depuis une app VS.NET2005).
Les modifications ne touchent au finale que qqs lignes dans XMLApp et XMLService. Si ca interesse qqn je les posterais ici. Le principe etant de stockée le domaine de nom à l'arrivée pour réutiliser le bon par la ensuite. Ce serait bien que cette modif soit portée dans le standard

Michael
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 11h59   #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
envoie toujours la modif je la proposerai à l'équipe R&D pour la prochaine version.
__________________
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, 12h17   #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
Telle quelle la modif ne peut pas etre reprise pcq je passe par une variable globale (ou une constante mais c quiff quiff) dans xmlapp. Il faudrait stocker l'enveloppe dans le context! (genre un XMLC_SOAPENV), mais je n'y suis pas parvenu, je ne connais pas assez bien le framework pour le faire au bon moment.
Dans mon cas je suis sur que le client sera toujours VS... donc ca fonctionne, même avec des requetes concurrentes
Je suis preneur de la version "propre"

Modif sous XMLRAD2005R2.
J'ai initialisé SOAP_ENV à 'SOAP-ENV'.

XMLApp.pas, 3578
Code :
1
2
3
4
5
6
7
8
 
              if (Pos('<SOAP-ENV:Envelope', ContentStr) > 0) 
              or (Pos('<soap:Envelope', ContentStr) > 0 ) 
              or (Pos('<env:Envelope', ContentStr) > 0 ) then
              begin
                if Pos('<SOAP-ENV:Envelope', ContentStr) > 0 then SOAP_ENV := 'SOAP-ENV' else
                if Pos('<soap:Envelope', ContentStr) > 0 then SOAP_ENV := 'soap' else
                if Pos('<env:Envelope', ContentStr) > 0 then SOAP_ENV := 'env';
XMLApp.pas, 4506
Code :
1
2
3
4
 
  SSOAPFault = '<%s:Envelope xmlns:%s="http://schemas.xmlsoap.org/soap/envelope/" %s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">'
    +'<%s:Body><%s:Fault><%s:faultcode>%s<%s:faultcode>'
    +'<%s:faultstring>%s</%s:faultstring></%s:Fault></%s:Body></%s:Envelope>';
XMLApp.pas, 4537
Code :
1
2
3
4
5
6
7
8
 
    FaultCode := SOAP_ENV+':Server'; 
    FaultString := E.Message;
    SoapFault := Format(SSOAPFault, [SOAP_ENV ,SOAP_ENV ,SOAP_ENV ,
                                     SOAP_ENV ,SOAP_ENV ,SOAP_ENV ,
                                     FaultCode, SOAP_ENV ,SOAP_ENV ,
                                     FaultString, SOAP_ENV ,SOAP_ENV ,SOAP_ENV ,
                                     SOAP_ENV ]);

XMLService.pas, 374
Code :
1
2
3
4
 
  SXMLSOAPEnvelope = '<%s:Envelope xmlns:%s="http://schemas.xmlsoap.org/soap/envelope/"'
    +' %s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="%s">'
    +'<%s:Body></%s:Body></%s:Envelope>';
XMLservice.pas, 509
Code :
1
2
3
4
5
6
 
    S := Format(SXMLSOAPEnvelope, [SOAP_ENV ,SOAP_ENV ,SOAP_ENV ,
                                        TargetNameSpace, SOAP_ENV , SOAP_ENV ,
                                       SOAP_ENV ]);  
    OutputDoc.LoadXML(S); 
    Output := OutputDoc.Select('/'+SOAP_ENV+':Envelope/'+ SOAP_ENV+':Body');
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 15h25   #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
c'est pas mal, mais effectivement cela reste encore trop spécifique
pour te donner une idée de la difficulté:
actuellement il y un namespace (soap: ou SOAP-ENV mais il peut très bien ne pas y en avoir: <Enveloppe>
et donc avec tes : partout cela fonctionnerait pas.
pour savoir il faut pratiquemen parser le XML entièrement, mais encore faudrati-til savoir que c'est du XML qui est enovyé
avec le ContentType on une idée mais pas toujours vrai non plus:
text/xml, text/xml-SOAP, application/soap+xml, etc...
pourtant la norme indique clairement application/soap+xml mais Microsoft ou Borland balance text/xml...
sans parler que parser a chaque fois le contenu XML n'est pas non plus un négligeable en temps de traitement...
__________________
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, 15h41   #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
C'est clair, tous les cas ne seront que tres difficile à gérer... Mais le support de VS.NET peut etre tout de même relativement interessant, etant donné sa popularité! Je ne connais pas le format d'une app Java, mais avec un peu de chance elle n'est pas si différente non plus et donc avec une couverture de Borland/Microsoft/Java ca me parait suffisant
Jeweller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2006, 09h28   #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
oui oui, de toutes facons ca s'étudie.
je relance la dessus.
__________________
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, 09h12   #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
Une erreur c'est glissée, voici la correction (un '/' manquait):

XMLApp.pas, 4506
Code :
1
2
3
4
SSOAPFault = '<%s:Envelope xmlns:%s="http://schemas.xmlsoap.org/soap/envelope/" %s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">'
    +'<%s:Body><%s:Fault><%s:faultcode>%s</%s:faultcode>'
    +'<%s:faultstring>%s</%s:faultstring></%s:Fault></%s:Body></%s:Envelope>';
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 00h25.


 
 
 
 
Partenaires

Hébergement Web