IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XMLRAD Discussion :

Invoquer un WebService XMLRAD depuis VS.NET


Sujet :

XMLRAD

  1. #1
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    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

  2. #2
    RDM
    RDM est déconnecté
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Par défaut
    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

  3. #3
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut
    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

  4. #4
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut
    Bon j'ai remplacé la ligne qui va bien par ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut
    Ben non ca suffit pas!
    "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

  6. #6
    RDM
    RDM est déconnecté
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Par défaut
    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...

  7. #7
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut
    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

  8. #8
    RDM
    RDM est déconnecté
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Par défaut
    envoie toujours la modif je la proposerai à l'équipe R&D pour la prochaine version.

  9. #9
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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');

  10. #10
    RDM
    RDM est déconnecté
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Par défaut
    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...

  11. #11
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut
    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

  12. #12
    RDM
    RDM est déconnecté
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Par défaut
    oui oui, de toutes facons ca s'étudie.
    je relance la dessus.

  13. #13
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut
    Une erreur c'est glissée, voici la correction (un '/' manquait):

    XMLApp.pas, 4506
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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>';

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accéder à une bd SQl Server depuis le net ?
    Par Root_JDK dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/01/2007, 10h30
  2. Supprimer une Base de Données depuis ASP .NET
    Par moumoune65 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/08/2006, 10h22
  3. [VB.NET] Ecrire dans EXCEL 2002 depuis VB.net
    Par vijeo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/06/2006, 13h09
  4. [Apache] Accès depuis le net impossible
    Par Nasky dans le forum Apache
    Réponses: 2
    Dernier message: 09/04/2006, 04h07
  5. [VB.Net] - Acces à Excel depuis VB.Net
    Par toninonino dans le forum Windows Forms
    Réponses: 14
    Dernier message: 30/09/2005, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo