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

Web & réseau Delphi Discussion :

Compo HTTP et client SOAP webservice ?


Sujet :

Web & réseau Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut Compo HTTP et client SOAP webservice ?
    Bonjour à tous,

    voici mon probleme, j'utilise les composants ICS et plus particulièrement le HttpCli pour effectuer une connexion sur un webservice SOAP.

    Mais voilà tout fonctionne trés bien lorsque je demande des documents et que la réponse ne contient pas de pieces attachées.
    Le probleme survient lorsque je demande un doc qui posséde une piece attachée, j'obtiens bien le XML mais impossible de chopper la piece attaché et pourtant on me confirme que la response contient bien une piece attachée.

    je peux fournir le petit prog pour ceux qui pense pouvoir m'aider. j'utilise le prog HttpTst où j'ai juste ajouté quelques lignes. Rien de tres special.

    Merci à tous ceux qui pourrons m'aide à récupèrer la piece attachée.

    Bruno

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    4 jours maintenant que je galère sur ce probleme sans trouver comment je peux faire pour récupèrer le fichier attaché surtout que je le vois même pas et on me confirme qu'il y est.

    Allez les gars un peu d'aide, j'ai épuisé toutes les réponses de google et toutes les FAQS

    Bruno

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    J'en suis à 6 jours et toujours pas trouvé de solution :o)

    je suis desespéré !

    Bruno

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    up !
    Sorry

  5. #5
    Membre averti

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Points : 441
    Points
    441
    Par défaut
    N'ayant pas utilisé de service web en Delphi (mais en Java), je suis pas sûr de pouvoir t'aider...
    Néanmoins, tu n'as pas une classe correspondante à l'objet reçu ?

    Au pire, je peux jeter un oeil à ton programme. Mais je ne te garantis rien

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut Big,

    Enfin quelqu'un qui se propose de m'aider, je t'assure que pour ce sujet je crois avoir épuisé tous les endroits qui en parle.

    Comment puis-je faire pour t'envoyer le petit programme ?
    voici mon mail "bmannina chez free fr"

    Envoie moi un mail et je te reply avec le code source.
    Sinon dis moi comment tu veux faire si cela ne te convient pas.

    Mille merci pour ta réponse.

    Bruno

  7. #7
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    salut,
    est ce que tu as posté sur la mailing list de ics, ou as tu été sur http://www.overbyte.be/frame_index.html
    généralement ça répond plutôt bien...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Oui c vrai généralement, Francois repond à ce type de question mais là personne et cela depuis plusieurs jours hélas.

    Le sujet ne semble pas trop interesser les gens.

    Amitiés,
    Bruno

  9. #9
    Membre averti

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Points : 441
    Points
    441
    Par défaut
    Je vais voir ce que je peux faire, mais je ne saurais pas t'aider avant ce week-end...

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut Big,

    Pour info voici toutes les infos du service :
    le WSDL se trouve ici :
    http://ops-i.espacenet.com/OpenPatentServices/OpenPatentServices.wsdl

    l'url est du service est :
    http://ops-i.espacenet.com/OpenPatentServices/webService

    La requete XML est :
    <OpenPatentServices ACTION="DocumentRetrieval"><WORLDPATENTDATA><DOCUMENT ID="EP 1616786A1 I " FORMAT="SINGLE_PAGE_PDF" SYSTEM="BNS" PAGE_NUMBER="1"/></WORLDPATENTDATA></OpenPatentServices>


    Mille merci pour otn aide

  11. #11
    Membre averti

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Points : 441
    Points
    441
    Par défaut
    Sans utiliser les compos ICS, mais juste l'importateur WSDL (assistant Delphi), j'arrive à dialoguer avec mon service web (je travaille en local). J'arrive à récupérer le document ods (openoffice write), en utilisant un TStream et une fonction de conversion hexa > bin.

    N'ayant pas ton projet, je ne sais pas t'aider beaucoup plus...

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    J'ai aussi utiliser l'importateur de D7 mais là aussi j'arrive bien à dialoguer mais pas à voir mon fichier binaire attaché. De plus le WSDL me fourni 2 fonction GetDocumentData qui normalement renvoie une WideString dans laquelle il doit y avoir le fichier binaire et le XML mais je n'ai que le XML.

    Est-ce que la fonction de recuperation du fichier attaché est une fonction non pas fourni par le WSDL mais Delphi ?

    heu je sais pas si j'ai bien été clair

  13. #13
    Membre averti

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Points : 441
    Points
    441
    Par défaut
    Il faut voir ce que tu renvoie le service Web
    Normallement, il est sensé renvoyer un fichier xml comme ceci
    Citation Envoyé par WebService
    <base64Binary>
    /9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2JlAGTAAAAAAf/b
    AIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEADBMTFBQTExwbGxsc
    Hx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f
    Hx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBiwEMAwERAAIRAQMRAf/EAKMAAAEEAwEBAAAAAAAAAAAA
    AAEAAgMFBAYHCAkBAAMBAQEBAQAAAAAAAAAAAAABAgMEBQYHEAABAwMCBAQDBgQEBAYDAAABABEC
    IQMEMQVBURIGYXEiE4GhB5GxwTJCFPDhUiPR8RUIcjMkFmKCkqJDU7JjNBEBAQADAAICAQMDAwMF
    AQAAAAERAgMhBDESQSITBVFhMvBxFIGRobHh8UIVI//aAAwDAQACEQMRAD8A85X36zwTTURdMic6
    6t8lQB6itUiJ5acRogF1EsDTgW83QZdRJqWQA6j5IwBctXTmgCDJix1+5ALqNS7eaALkF9SPsTAP
    JADqNUYBOWISAuT/ggEX/wQCEpaDzTM4dTCo0SB3UQNS3JCg6i6CEElI4cCUGM43Ldw25xMLkZ
    GM4SBiRIFiCDoyCMJKZD1SPGieCEAkcSXQYioSMRzTBwMj4IPBMWZIA54eCZHDhUvqgE3Gru+qDQ
    XifcNeKlFREluPEeCaQ6j8CmYElmZzq9XHhqghJIZ9Wf4FAAkiqDAvpzQQuz/emCdz9wSMHPE1QB
    E6ckAusoBxMhQmnIeKARBABfVAB6O1OaAAJfxQBcmSCHqPOiMmc5/FkHDgftSUBLE80EIJ+xBw5y
    Qa1/gIMhUOToKA1cPonCNqggr/JBJLV2VuRkAC8TH1REh6gQ9eI4eNUARIsyDLqLJmIJYoBdRNEg</base64Binary>
    Ce qui correspond à un array of bytes. à toi d'extraire les données brutes du document xml, et de les transférer dans un flux...

    Au pire, essaie de faire un test sur mon webservice (mais il marche en c# et asp.net, le tout en local)

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut Big,

    justement, je n'obtiens jamais ce type de réponse, il y a juste le XML de reponse mais pas de message binaire ensuite.

    c pour cela que je suis bien embêté

  15. #15
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Salut,

    Dans la mesure du possible, il faudrait plutôt utiliser l'importateur WSDL de delphi, mais tu ne peux le faire qu'en fonction de la version de delphi que tu possèdes.

    Perso j'ai D6 Entreprise, donc attaquer un service WSDL est un jeu d'enfant en faisant "Nouveau -> Onglet Services Web -> Importateur WSDL".

    Tu indiques "http://ops-i.espacenet.com/OpenPatentServices/OpenPatentServices.wsdl", puis tu obtiens l'interface ci-après.

    Je la copie colle tout de même ci dessous, car ça peut te permettre de comprendre le fonctionnement du serveur que tu dois attaquer.

    Bon dev'.

    Voici donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    // ************************************************************************ //
    // Les types déclaré dans ce fichier ont été générés à partir de données lues dans le fichier
    // WSDL décrit ci-dessous :
    // WSDL     : http://ops-i.espacenet.com/OpenPatentServices/OpenPatentServices.wsdl
    // Version  : 1.0
    // (24/03/2006 08:46:02 - $Revision:   1.9.1.0.1.0.1.9  $)
    // ************************************************************************ //
     
    unit OpenPatentServices;
     
    interface
     
    uses InvokeRegistry, Types, XSBuiltIns;
     
    type
     
      // ************************************************************************ //
      // Les types suivants mentionnés dans le document WSDL ne sont pas représentés
      // dans ce fichier. Ce sont soit des alias[@] de types représentés ou alors ils sont 
      // référencés mais jamais[!] déclarés dans ce document. Les types de la dernière catégorie
      // sont en principe mappés à des types Borland ou XML prédéfinis/connus. Toutefois, ils peuvent aussi
      // signaler des documents WSDL incorrects n'ayant pas réussi à déclarer ou importer un type de schéma.
      // ************************************************************************ //
      // !:string          - "http://www.w3.org/2001/XMLSchema"
     
     
      // ************************************************************************ //
      // Espace de nommage : urn:EPO-OpenPatentServices
      // transport : http://schemas.xmlsoap.org/soap/http
      // style     : rpc
      // liaison   : OpenPatentServicesBinding
      // service   : OpenPatentServicesService
      // port      : OpenPatentServicesPort
      // URL       : http://ops-i.espacenet.com/OpenPatentServices/webService
      // ************************************************************************ //
      OpenPatentServicesPortType = interface(IInvokable)
      ['{E3723400-B65D-9243-8E04-C1CD7D54DD9A}']
        function  getPatentData(const input_request: String): String; stdcall;
        function  getDocumentData(const input_request: String): String; stdcall;
      end;
     
    function GetOpenPatentServicesPortType(UseWSDL: Boolean=System.False; Addr: string=''): OpenPatentServicesPortType;
     
     
    implementation
      uses SOAPHTTPClient;
     
    function GetOpenPatentServicesPortType(UseWSDL: Boolean; Addr: string): OpenPatentServicesPortType;
    const
      defWSDL = 'http://ops-i.espacenet.com/OpenPatentServices/OpenPatentServices.wsdl';
      defURL  = 'http://ops-i.espacenet.com/OpenPatentServices/webService';
      defSvc  = 'OpenPatentServicesService';
      defPrt  = 'OpenPatentServicesPort';
    var
      RIO: THTTPRIO;
    begin
      Result := nil;
      if (Addr = '') then
      begin
        if UseWSDL then
          Addr := defWSDL
        else
          Addr := defURL;
      end;
      RIO := THTTPRIO.Create(nil);
      try
         if UseWSDL then
        begin
          RIO.WSDLLocation := Addr;
          RIO.Service := defSvc;
          RIO.Port := defPrt;
        end else
          RIO.URL := Addr;
        Result := (RIO as OpenPatentServicesPortType);
      finally
        if Result = nil then
          RIO.Free;
      end;
    end;
     
     
    initialization
      InvRegistry.RegisterInterface(TypeInfo(OpenPatentServicesPortType), 'urn:EPO-OpenPatentServices', '');
      InvRegistry.RegisterDefaultSOAPAction(TypeInfo(OpenPatentServicesPortType), '');
     
    end.

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut DMO,

    Oui, ça c'est la premiere chose que j'ai fait, et justement c'est qu'avec ce type d'import, je n'obtiens pas le fichier binaire attaché, j'ai juste en réponse le XML d'entete et pas de binaire à la suite.

    Que faut-il faire pour avoir le Binaire ? que faut'-il ajouter ?

    Voici un exemple de la requete que j'envoie :
    <OpenPatentServices ACTION="DocumentRetrieval"><WORLDPATENTDATA><DOCUMENT ID="EP 1000000PAFP " FORMAT="SINGLE_PAGE_PDF" SYSTEM="BNS" PAGE_NUMBER="1"/></WORLDPATENTDATA></OpenPatentServices>

    Et normalement le retour doit avoir un fichier binaire en plus de la réponse XML.

    En tout cas merci pour ton aide.
    Bruno

  17. #17
    Membre averti

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Points : 441
    Points
    441
    Par défaut
    Tu recevras toujours une réponse au format xml.
    Malheureusement, le service Web ne permet d'utiliser la métode HTTP Invoke, qui permet d'utiliser une interface web.

    Si tu reçois un document XML, peux-tu le poster afin de voir sa structure ? Par ailleurs, es-tu sûr de la requête d'entrée ?

  18. #18
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Ok très bien, je t'invite en effet à utiliser, comme tu le fesais au début, la formidable encapsulation de delphi plutôt qu'un simple composant HTTP client (tu peux bien sûr décliner l'invitation !)

    L'interface de ce service web est tellement pauvre et peu explicite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function getPatentData(const input_request: String): String;
    function getDocumentData(const input_request: String): String;
    qu'à mon humble avis tu ne dois pas lui donner "ce qu'il faut" dans "input_request", et qu'il ne doit du coup en effet bien pas t'envoyer de binaire comme tu l'attendais.
    Tu as de la doc ? Ou tu sais exactement comment ca marche ? En gros est-tu sûr de ta requête ? Si tu appelles les procédures distantes à l'aide de l'unitée pré-citée, tu n'as aucune levée de remotable exception ?

    Ce peut-être également le serveur qui pour je ne sais quelle raison ne le renvoie bien plus le binaire que tu attends, mais c'est moins certain.

    Autrement, je vois pas où peut-être le problème. M'enfin l'interface de ce serveur n'est vraiment pas pratique : si elle avait été plus explicite tu t'emm... vachement moins...

    Bon courage

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut Big,

    voici la réponse que j'obtiens :
    <WORLDPATENTDATA><DOCUMENT ID="EP 1616786A1 I " PAGE_NUMBER="1" FORMAT="SINGLE_PAGE_PDF" SYSTEM="BNS">
    <DESC>FullDocument</DESC>
    <CONTENT_REF>EP 1616786A1 I .pdf</CONTENT_REF>
    </DOCUMENT></WORLDPATENTDATA>


    voici la requete:
    <OpenPatentServices ACTION="DocumentRetrieval"><WORLDPATENTDATA><DOCUMENT ID="EP 1616786A1 I " FORMAT="SINGLE_PAGE_PDF" SYSTEM="BNS" PAGE_NUMBER="1"/></WORLDPATENTDATA></OpenPatentServices>


    tu peux voir d'autres exemples sur le site :
    http://ops-i.espacenet.com

    Seul le DocumentRetrieval est censé renvoyer un binary en attach

    Bruno

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut DMO,

    je n'ai aucune aide car les personnes qui s'occupent de ce service sont tres avare de renseignements. Il me confirme juste que chez eux cela marche trés bien et m'ont meme dit que Delphi géré trés mal les fichiers attachés. pfffe !

    Un truc que je viens de remarquer, moi quand j'utilise l'importateur WSDL, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      OpenPatentServicesPortType = interface(IInvokable)
      ['{E3723400-B65D-9243-8E04-C1CD7D54DD9A}']
        function  getPatentData(const input_request: WideString): WideString; stdcall;
        function  getDocumentData(const input_request: WideString): WideString; stdcall;
      end;

    Tu remarqueras que j'ai des WideString et non des String
    Cela depend du Delphi que l'on posséde ? moi j'ai D7 Studio Pro

Discussions similaires

  1. Génération de Client de webservice SOAP
    Par habibouss dans le forum Services Web
    Réponses: 0
    Dernier message: 03/08/2014, 02h33
  2. [Web Service][SOAP] webservice : retour d'un tableau au client
    Par Florent08800 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 05/05/2012, 13h54
  3. [Web Service] Client SOAP ou autre pour appel webservice
    Par flo73 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 14/07/2010, 16h23
  4. Interface Web service : (Serveur en XML, HTTP) et un client SOAP
    Par commande dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 09/03/2009, 18h28
  5. [C#] [WebServices] Http Request et SOAP
    Par Piolet dans le forum Windows Forms
    Réponses: 17
    Dernier message: 02/02/2009, 17h42

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