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

Bibliothèques et frameworks PHP Discussion :

[Web Service] Connexion


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 25
    Points
    25
    Par défaut [Web Service] Connexion
    J'essaie de faire simplement fonctionner un web service sur mon serveur en local.
    Mon client en local :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $client = new SoapClient("server.wsdl");
    $ret = $client->__call("hello",array('steph'));
    print $ret;
    ?>
    Mon serveur en local :
    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
    <?php
    ini_set("soap.wsdl_cache_enabled", "0");
     
    class MonWebService 
        {
           function MonWebService()
           {
           }
           /**
            * Dis bonjour...
            * @param string $qui
            * @return string
            */
           function hello($qui)
           {
               return utf8_encode("Bonjour à toi : ".$qui);
           }
    }
    $server = new SoapServer("server.wsdl");
    $server->setClass("MonWebService");
    $server->handle();
     
     
    print "Ce web service MonWebService contient les méthodes suivantes :<br><ul>";
    $aFuncs = $server->getFunctions();
    for($i=0;$i<sizeof($aFuncs);$i++)
    {
        print("<li>".$aFuncs[$i]."</li>");
    }
    print "</ul>";
    ?>
    WSDL en local :
    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
    <?xml version='1.0' encoding='UTF-8'?>
     
    <!-- WSDL file generated by Zend Studio. -->
     
    <definitions name="server" targetNamespace="urn:server" xmlns:typens="urn:server" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
        <message name="hello">
            <part name="qui" type="xsd:string"/>
        </message>
        <message name="helloResponse">
            <part name="helloReturn" type="xsd:string"/>
        </message>
        <portType name="MonWebServicePortType">
            <operation name="hello">
                <documentation>
                    Dis bonjour...
                </documentation>
                <input message="typens:hello"/>
                <output message="typens:helloResponse"/>
            </operation>
        </portType>
        <binding name="MonWebServiceBinding" type="typens:MonWebServicePortType">
            <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="hello">
                <soap:operation soapAction="urn:MonWebServiceAction"/>
                <input>
                    <soap:body namespace="urn:server" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                </input>
                <output>
                    <soap:body namespace="urn:server" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                </output>
            </operation>
        </binding>
        <service name="serverService">
            <port name="MonWebServicePort" binding="typens:MonWebServiceBinding">
                <soap:address location="http://localhost/ws/webservice/index.php"/>
            </port>
        </service>
    </definitions>
    Quand j'appelle mon client, j'ai le message suivant qui me fait perdre mon latin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in C:\xampplite\htdocs\ws\webservice\test.php:3 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://localhos...', 'urn:MonWebServi...', 1, 0) #1 C:\xampplite\htdocs\ws\webservice\test.php(3): SoapClient->__call('hello', Array) #2 {main} thrown in C:\xampplite\htdocs\ws\webservice\test.php on line 3
    Quand j'appelle directement le serveur, tout se passe bien visiblement :
    " Ce web service MonWebService contient les méthodes suivantes :
    * MonWebService
    * hello "

    Si ça parle à quelqu'un je suis preneur !!

    Merci à tous

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 49
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    Suite à nos échanges privés, je résume :

    J'ai pris ton code tel quel. Chez moi, ça marche.

    Hypothèse 1:
    Désactive le cache wsdl aussi dans le client.
    Si tu as fait au moins un test avec une soap:adress erronée avant de mettre ton wsdl final au point, le cache fournit l'adresse erronée au client.

    Remarque :
    Sur la doc PHP, __call est obsolète et __soapCall est conseillé à la place. Chez moi ça marche avec __call, mais ça vaut le coup que tu essaies chez toi.

    Remarque 2 :

    Dans le serveur, le print qui suit le handle() va perturber la réponse du service lors de sa consommation (le flux de sortie sera le XML de la réponse + le contenu du print, soit du XML mal formé ).

    L'affichage d'informations que tu essaies de faire OU(exclusif) le handle du serveur doivent se faire conditionnellement à la présence de données POST dans la requête http reçue du client(pour cela, tu vérifies le "contenu" du flux php://input. Cela s'utilise comme un fichier, fopen/fread/fclose, ou file_get_contents, ou autre...).

    Tiens moi au courant.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 25
    Points
    25
    Par défaut
    Grand merci Pandrogynik
    Tu apportes un énorme plus à la communauté !

    Le problème se situait bien au niveau de l'appel :

    $ret = $client->__soapCall("hello",array('test')); marche mais pas
    $ret = $client->__call("hello",array('test')); chez moi

    J'espère que ce sera utile pour d'autres

    Excellente journée

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 49
    Points : 64
    Points
    64
    Par défaut
    De rien.

    Je reste personnellement sur 2 points d'interrogation :

    _Pourquoi ça a marché chez moi ?

    _Le prototype de __call dans la doc est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public mixed SoapClient::__call  (  string $function_name  ,  string $arguments  )
    ...et cela semble naturel à tout le monde de passer un array en 2è argument et non une string...et ça marche...
    Mais bon, je n'ai jamais lu la doc de __call antérieurement à son obsolescence, il y avait peut-être des détails à ce sujet...

    Bonne chance pour la suite en tout cas.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/08/2012, 12h47
  2. Réponses: 2
    Dernier message: 20/07/2011, 11h09
  3. [Web Service] Connexion à un service web
    Par mimosa803 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 22/03/2010, 14h56
  4. [Web Service] Connexion à mon service web
    Par durnambule dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 10/09/2009, 10h48
  5. [Web Service] Connexion membre à l'aide d'un service web
    Par infiniti dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/07/2009, 14h07

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