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 :

Appeller un webservice avec une pièce jointe


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Par défaut Appeller un webservice avec une pièce jointe
    Bonjour,

    J'utilise Delphi 2009 et je dispose d'un WSDL contenant plusieurs méthodes.
    L'importation de WDSL fourni avec Delphi 2009 m'a permis d'obtenir une unité et j'arrive même à invoquer des webservices.
    Jusque là, tout va bien.

    Cependant, pour l'une de ces méthodes, le serveur (écrit en Java) s'attend à ce que je lui transmette une pièce jointe (SOAP-Attachment) en plus de données simples (ex: le nom et le prénom d'un membre, avec en plus la photo sous forme d'image de ce membre).

    Je précise que la méthode ne contient qu'un paramètre "Request" contenant toutes les données élémentaires (ex: le nom et le prénom d'un membre) mais aucun paramètre TSOAPAttachment (pour y mettre la photo du membre). Comme ça, ça ne me choque pas trop car il me semble bien que les pièces jointes sont un élément complètement à part du message SOAP.

    J'ai cherché sur Google et sur ce forum mais tout ce que j'ai trouvé sur le sujet, c'est quelques discussions pas très claires mais jamais d'exemples concrets.

    Est-ce que quelqu'un aurait un exemple concret de code source ?
    Est-ce totalement impossible à faire ?

    Dans les exemples fournis en démo dans Delphi 2009, j'ai un client et un serveur échangeant un TSOAPAttachment mais il n'y a que ça d'échangé, ce n'est du tout ce que je recherche.

    PS : j'ai aussi posté sur un groupe Google mais pas de réponse depuis une semaine...

    Par avance, merci de votre aide.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Essaye de jouer avec les options de l'importateur WSDL, selon comment on le configure, cela importe plus ou moins de chose, en particulier les structures complexes en literal ou encoded ...

    sinon sans le WSDL, difficile de te dire si il manque un mot clé pour Borland SOAP, normalement, cela devrait être un paramètre d'une fonction ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Par défaut
    Bien vu, je n'avais pas remarqué toutes les options que proposent l'importateur WSDL. Enfin, je n'ai pas trouvé mon bonheur dedans.

    Voilà le WSDL et le XSD qui vont ensemble :

    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
    <?xml version="1.0" encoding="UTF-8"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:schema="http://www.mycompany.fr/schema/methodes/gestion/administration" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="http://www.mycompany.fr/schema/methodes/gestion/administration">
      <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:admin="http://www.mycompany.fr/schema/methodes/gestion/administration" xmlns:gestion="http://www.mycompany.fr/schema/methodes/gestion" elementFormDefault="qualified" targetNamespace="http://www.mycompany.fr/schema/methodes/gestion/administration">
     
        <xs:import namespace="http://www.mycompany.fr/schema/methodes/gestion" schemaLocation="gestion.xsd"/>
     
        <xs:element name="creerRessourceRequest">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="debutValidite" type="xs:date"/>
                    <xs:element name="finValidite" type="xs:date"/>
                    <xs:element name="metaInformations" type="gestion:MetaInformations"/>
                    <xs:element name="libelle" type="gestion:Libelle"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="creerRessourceResponse">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="identifiant" type="gestion:Identifiant"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
     
    </xs:schema>
      </wsdl:types>
      <wsdl:message name="creerRessourceResponse">
        <wsdl:part element="schema:creerRessourceResponse" name="creerRessourceResponse">
        </wsdl:part>
      </wsdl:message>
      <wsdl:message name="creerRessourceRequest">
        <wsdl:part element="schema:creerRessourceRequest" name="creerRessourceRequest">
        </wsdl:part>
      </wsdl:message>
      <wsdl:portType name="administration">
        <wsdl:operation name="creerRessource">
          <wsdl:input message="schema:creerRessourceRequest" name="creerRessourceRequest">
        </wsdl:input>
          <wsdl:output message="schema:creerRessourceResponse" name="creerRessourceResponse">
        </wsdl:output>
        </wsdl:operation>
      </wsdl:portType>
      <wsdl:binding name="administrationBinding" type="schema:administration">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="creerRessource">
          <soap:operation soapAction=""/>
          <wsdl:input name="creerRessourceRequest">
            <soap:body use="literal"/>
          </wsdl:input>
          <wsdl:output name="creerRessourceResponse">
            <soap:body use="literal"/>
          </wsdl:output>
        </wsdl:operation>
      </wsdl:binding>
      <wsdl:service name="administrationService">
        <wsdl:port binding="schema:administrationBinding" name="administrationPort">
          <soap:address location="http://192.96.90.49:9082/gestionRessources/"/>
        </wsdl:port>
      </wsdl:service>
    </wsdl:definitions>
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.mycompany.fr/schema/methodes/gestion"
        elementFormDefault="qualified">
     
        <xs:simpleType name="Identifiant">
            <xs:restriction base="xs:string">
                <xs:maxLength value="40"/>
            </xs:restriction>
        </xs:simpleType>
     
        <xs:simpleType name="Libelle">
            <xs:restriction base="xs:string">
                <xs:maxLength value="40"/>
            </xs:restriction>
        </xs:simpleType>
     
        <xs:simpleType name="MetaInformations">
            <xs:restriction base="xs:string">
                <xs:maxLength value="200"/>
            </xs:restriction>
        </xs:simpleType>
     
    </xs:schema>
    La méthode "creerRessource" contient plusieurs données primitives (identifiant, libellé, et méta-informations) et il faut pouvoir lui passer aussi une pièce jointe.

    Je ne demande pas de code tout fait (ce n'est pas autorisé dans la charte du forum je crois ) mais juste un exemple de coding déjà éprouvé car j'imagine que je dois "bidouiller" mon unité Delphi pour arriver à faire ce que je veux faire.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Citation Envoyé par mixi Voir le message
    Je ne demande pas de code tout fait (ce n'est pas autorisé dans la charte du forum je crois ) mais juste un exemple de coding déjà éprouvé car j'imagine que je dois "bidouiller" mon unité Delphi pour arriver à faire ce que je veux faire.
    Quel bel esprit, beaucoup attendent un code prêt à l'emploi, pour l'insérer dans leur devoir pour l'école ou pour compenser leur inaptitude en tant que professionnel ...

    Je ne vois nulle part la mention d'un Attachement SOAP ... que ce soit par base64Binary ou par MIME\Content, tu devrais contacter le fournisseur de ce WebService, sa WSDL est incomplète, essaye avoir lui pour voir si il peut te founir un exemple de Paquet SOAP que le client doit générer, Header HTTP inclu !

    sinon faut bricoler via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HTTPRIO.Converter.Attachments.Add(SoapAttachment)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    regarde ici un exemple dans un autre langage

    @+ Phil

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    anapurna, ton lien vers IBM est très lent, c'est un bon résumé du W3C sur les options MIME\Content qui sont vraiement pénible à lire

    le problème c'est que sa WSDL est terrible incomplète, comme je le disais, au sujet d'un Attachement SOAP ... que ce soit par base64Binary ou par MIME\Content

    par contre l'utilisation de Apache SOAP 2.2, c'est la version du SOAP ? ou du Apache ? sinon c'est SOAP 1.1 pour l'attachement, en .NET, il y a une implémentation 1.2, mais je ne sais pas en D2009
    faudrait savoir aussi si le serveur est fait en SAAAJ, si oui, la WSDL est donc vraiement pas complète, si non, c'est que c'est un bricolage, pas très conventionnel, et assez contraire pour des problématiques d'interopérabilité
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Envoyer un mail avec une pièce jointe en VBS
    Par nicosmash dans le forum Vos Contributions VBScript
    Réponses: 3
    Dernier message: 24/06/2014, 09h32
  2. envoi d'E-mail avec une pièce jointe
    Par adil54 dans le forum Langage
    Réponses: 4
    Dernier message: 11/07/2012, 13h58
  3. Envoyer un e-mail avec une pièce jointe
    Par KDZCrew dans le forum Langage
    Réponses: 1
    Dernier message: 10/11/2010, 15h56
  4. Réponses: 4
    Dernier message: 09/06/2010, 17h44
  5. envoyer un email avec une pièce jointe
    Par stephanies_1977 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/09/2007, 20h53

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