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

Services Web Discussion :

consommation d'un webservice et affichage du résultat


Sujet :

Services Web

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Points : 80
    Points
    80
    Par défaut consommation d'un webservice et affichage du résultat
    Bonjour,

    J'ai besoin d'aide pour la création et la consommation d'un webservice en c#.

    j'ai un log d'un programme dont je n'ai pas accès et qui consomme une méthode d'un service web :

    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
     
    <?xml version="1.0" encoding="utf-8" ?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.esri.com/schemas/ArcGIS/9.3">
        <soap:Body>
            <tns:GetDefaultInputFieldMappingResponse>
                <DefaultMapping xsi:type="tns:PropertySet">
                    <PropertyArray xsi:type="tns:ArrayOfPropertySetProperty">
                        <PropertySetProperty xsi:type="tns:PropertySetProperty">
                            <Key>Zone</Key>
                            <Value xsi:type="xsd:string">Zip, Zipcode, City, Zone</Value>
                        </PropertySetProperty>
                        <PropertySetProperty xsi:type="tns:PropertySetProperty">
                            <Key>Street</Key>
                            <Value xsi:type="xsd:string">Address, Addr, Street</Value>
                        </PropertySetProperty>
                    </PropertyArray>
                </DefaultMapping>
            </tns:GetDefaultInputFieldMappingResponse>
        </soap:Body>
    </soap:Envelope>
    Et je dois recréé de façon identique la même réponse mais dans un webservice différent.

    J'ai pensé à deux solutions différentes :
    - retourner directement un XML comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <DefaultMapping xsi:type="tns:PropertySet">
                    <PropertyArray xsi:type="tns:ArrayOfPropertySetProperty">
                        <PropertySetProperty xsi:type="tns:PropertySetProperty">
                            <Key>Zone</Key>
                            <Value xsi:type="xsd:string">Zip, Zipcode, City, Zone</Value>
                        </PropertySetProperty>
                        <PropertySetProperty xsi:type="tns:PropertySetProperty">
                            <Key>Street</Key>
                            <Value xsi:type="xsd:string">Address, Addr, Street</Value>
                        </PropertySetProperty>
                    </PropertyArray>
                </DefaultMapping>
    - ou recréer tout le propertySet et le propertySetArray


    La version XML me semble la plus rapide (sachant que je n'aurais jamais à modifier le contenu) mais je ne sais pas si c'est possible.


    Mais surtout je voudrais savoir comment tester ce webservice en affichant la réponse comme celà :

    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
     
    <?xml version="1.0" encoding="utf-8" ?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.esri.com/schemas/ArcGIS/9.3">
        <soap:Body>
            <tns:GetDefaultInputFieldMappingResponse>
                <DefaultMapping xsi:type="tns:PropertySet">
                    <PropertyArray xsi:type="tns:ArrayOfPropertySetProperty">
                        <PropertySetProperty xsi:type="tns:PropertySetProperty">
                            <Key>Zone</Key>
                            <Value xsi:type="xsd:string">Zip, Zipcode, City, Zone</Value>
                        </PropertySetProperty>
                        <PropertySetProperty xsi:type="tns:PropertySetProperty">
                            <Key>Street</Key>
                            <Value xsi:type="xsd:string">Address, Addr, Street</Value>
                        </PropertySetProperty>
                    </PropertyArray>
                </DefaultMapping>
            </tns:GetDefaultInputFieldMappingResponse>
        </soap:Body>
    </soap:Envelope>
    Pour l'instant la seule chose que j'arrive à faire c'est de créer un petit site web qui consomme la méthode du webservice quand on clique sur un bouton.
    J'obtiens bien un objet en réponse mais comment l'afficher comme ce que j'ai mis entre les balises codes ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut
    Salut skerdreux,

    as-tu déjà essayé de créer une classe "interface" avec wsdl.exe et csc.exe sur le wsdl du Service Web que tu dois consommer? Cela te permettrait d'avoir le bon type de donnée.

    Sinon si tu veux envoyer le XML comme tu l'as indiqué, tu peux utiliser les classe httpWebRequest et httpWebresponse!

    Cédric

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Points : 80
    Points
    80
    Par défaut
    en fait en utilisant XML Spy j'arrive à reproduire en partie ma réponse SOAP.

    J'obtiens le code suivant en réponse :

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    	<soap:Body>
    		<GetDefaultInputFieldMappingResponse xmlns="http://graphland.fr/geolocalisation">
    			<GetDefaultInputFieldMappingResult>
    				<PropertyArray xmlns="">
    					<PropertySetProperty>
    						<Key>Zone</Key>
    						<Value xsi:type="xsd:string">Zip, Zipcode, City, Zone</Value>
    					</PropertySetProperty>
    					<PropertySetProperty>
    						<Key>Street</Key>
    						<Value xsi:type="xsd:string">Address, Addr, Street</Value>
    					</PropertySetProperty>
    				</PropertyArray>
    			</GetDefaultInputFieldMappingResult>
    		</GetDefaultInputFieldMappingResponse>
    	</soap:Body>
    </soap:Envelope>
    j'observe quelques différentes :
    • la balise <GetDefaultInputFieldMappingResult> devrait en fait se nommer <tns:GetDefaultInputFieldMappingResponse>
    • 2 j'ai des espaces de noms un peu partout dans la réponse SOAP d'origine que je n'arrive pas à repproduire via mon webservice.


    bien évidemment je voudrais bien résoudre ces deux problèmes mais j'avoue que je n'ai pas vraiment d'idée

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut
    Salut skerdreux,

    As-tu essayer avec l'objet httpWebrequest() d'envoyer tes deux resquetes soap au Service Web et voir laquelle ne fontionnerait pas? (Bon selon moi, c'est mieux de faire une classe interface)!

    Cédric

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Points : 80
    Points
    80
    Par défaut
    le problème c'est qu'à l'heure actuelle je ne peux pas tester le fonctionnement du webservice via le programme qui va l'utiliser (qui est chez le client).
    De plus je ne sais pas comment il est utilisé dans le programme du client.

    C'est pour ça que je dois reproduire à l'identique la structure de la réponse SOAP avec les même noms de balises et si possible les même espaces de nom.

    Or c'est à ce niveau que je rencontre les problèmes évoqués juste avant.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Points : 80
    Points
    80
    Par défaut
    Je vais essayer de poser la question de manière différente :

    comment spécifier à un webservice que l'on veut utiliser un namespace mais sans préfixe ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut
    comment spécifier à un webservice que l'on veut utiliser un namespace mais sans préfixe ?
    Si je te comprends tu veux éviter ceci par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ..
    prefix.classe var = new prefix.classe(...)
    ...
    tu peux faire cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    using namespace;
    ...
    classe var = new classe(...)
    ...
    Est-ce que cela répond à ta question?

    Cédric

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Cédric B. Voir le message
    Si je te comprends tu veux éviter ceci par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ..
    prefix.classe var = new prefix.classe(...)
    ...
    tu peux faire cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    using namespace;
    ...
    classe var = new classe(...)
    ...
    Est-ce que cela répond à ta question?

    Cédric

    non pas du tout
    En fait je pense que le problème c'est mon explication.

    J'ai créé un webservice en c# qui utilise des objets d'un namespace : "http://www.esri.com/schemas/ArcGIS/9.3"

    J'ai donc mis au début de ma méthode de mon webservice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [WebMethod(Description = "Procédure privée - ne pas utiliser")]
            [SoapDocumentMethodAttribute(RequestNamespace = "http://www.esri.com/schemas/ArcGIS/9.3",ResponseNamespace = "http://www.esri.com/schemas/ArcGIS/9.3",Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
            [XmlInclude(typeof(PointN))]
            public ESRI.ArcGIS.ADF.ArcGISServer.RecordSet FindAddressCandidates(PropertySet Address, PropertySet PropMods)
            {
    or quand j'utilise SOAP UI pour générer une requête type il me génére :

    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
     
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.esri.com/schemas/ArcGIS/9.3">
       <soapenv:Header/>
       <soapenv:Body>
          <ns:FindAddressCandidates>
             <!--Optional:-->
             <ns:Address>
                <!--Optional:-->
                <PropertyArray>
                   <!--Zero or more repetitions:-->
                   <PropertySetProperty>
                      <!--Optional:-->
                      <Key>?</Key>
                      <Value>?</Value>
                   </PropertySetProperty>
                </PropertyArray>
             </ns:Address>
             <!--Optional:-->
             <ns:PropMods>
                <!--Optional:-->
                <PropertyArray>
                   <!--Zero or more repetitions:-->
                   <PropertySetProperty>
                      <!--Optional:-->
                      <Key>?</Key>
                      <Value>?</Value>
                   </PropertySetProperty>
                </PropertyArray>
             </ns:PropMods>
          </ns:FindAddressCandidates>
       </soapenv:Body>
    </soapenv:Envelope>
    or je voudrais la même chose sans le "ns:" mais je ne sais pas ce que je dois modifier dans mon webservice c# pour y arriver

Discussions similaires

  1. [MySQL] Affichage 1 résultat / 1 tableau
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 01/05/2006, 19h22
  2. [MySQL] affichage du résultat d'une requete dans une page
    Par blackbird1 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/03/2006, 14h07
  3. [MySQL] Affichage des résultats d'un requête
    Par wiwi dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/02/2006, 11h25
  4. Affichage des résultats d'un moteur de recherche
    Par poah dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 14h31
  5. Affichage du résultat
    Par thomas_strass dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/07/2005, 11h30

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