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 :

Créer et consommer un service web PHP en C#


Sujet :

Services Web

  1. #1
    Membre confirmé Avatar de KibitO
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 616
    Points : 606
    Points
    606
    Par défaut Créer et consommer un service web PHP en C#
    Bonjour,

    Voilà plusieurs jours que j'essaie de consommer un webservice que je créé en PHP depuis Visual Studio.

    J'ai créé la partie serveur, le serveur PHP et le fichier WSDL (généré via l'application gratuite DIA et UML2PHP5).

    1) Je créé mon schéma UML (une classe avec une fonction : Horloge, HeureExacte())
    2) J'exporte mon fichier .wsdl
    3) Je créé la partie serveur PHP

    Le fichier wsdl généré :
    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
    <?xml version="1.0" encoding="UTF-8"?><!--
        This file has been generated by UML2PHP5            
        UML2PHP5 is free and released under GPL
        Copyright KDO kdo@zpmag.com        
        UML2PHP5 : uml2php5.zpmag.com
    --><definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:webservice" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="WebServices" targetNamespace="urn:webservice">
    <message name="HelloWorldRequest"/>
    <portType name="HorlogePortType">
    <operation name="HelloWorld">
    <input message="tns:HelloWorldRequest"/>
    </operation>
    </portType>
    <binding name="HorlogeBinding" type="tns:HorlogePortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="HelloWorld">
    <soap:operation soapAction="urn:HorlogeAction"/>
    <input>
    <soap:body use="encoded" namespace="urn:xmethods" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    </input>
    </operation>
    </binding>
    <service name="Webservice">
    <port name="HorlogePort" binding="tns:HorlogeBinding">
    <soap:address location="http://URL/soap_server.php?action=Horloge"/>
    </port>
    </service>
    </definitions>
    Le serveur SOAP PHP :
    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
     
    <?php
    /**
     * Code generated by dia-uml2php5 plugin
     * written by KDO kdo@zpmag.com
     */
     
    // première étape : désactiver le cache wsdl lors de la phase de test
    ini_set("soap.wsdl_cache_enabled", "0");
     
     
    function HelloWorld()
    {
        return ("Hello World !");
    }
     
     
    $wsdl    = 'Webservices.wsdl';
    //Création du serveur SOAP avec le fichier WSDL
    $server = new SoapServer($wsdl);
    //Ajout de la classe Math dans les éléments proposés par le WebService
    $server->addFunction("HelloWorld");
     
     
    //l'utilisation du WebService se fera toujours par la méthode POST
    if ($_SERVER["REQUEST_METHOD"] == "POST") 
    {
        $server->handle();
    }
    else //dans le cas contraire, la page affichera les méthodes proposées par le WebService
    {
        echo '<h4>Ce serveur SOAP peut gérer les fonctions suivantes : </h4><ul>';
        $functions = $server->getFunctions();
        foreach($functions as $func)
        {
            echo '<li>'.$func.'</li>';
        }
     
        echo '</ul>';
    }
     
    $server->setPersistence(SOAP_PERSISTENCE_SESSION);
    $server->handle();
    ?>
    4) Je créé le client soap php pour tester mon webservice mais rien ne s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    /* 
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    $wsdl = "http://url/Webservices.wsdl";
     
    $client = new SoapClient($wsdl);
     
    echo $client->HelloWorld();
    Je précise que tous les fichiers sont dans le même répertoire sur le serveur;

    Une fois que j'aurai réussi à appeler mon service en PHP, quel fichier dois-je appeler dans Visual Studio lorsque je veux ajouter mon service web, soap_server.php ou bien Webservices.wsdl ?

    Je ne comprends pas le lien entre le wsdl et le serveur soap php. Ils s'appellent mutuellement et j'aimerais retrouver mes classes en C# pour les utiliser ensuite.

    Merci par avance pour votre aide.

    KibitO

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    314
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 314
    Points : 463
    Points
    463
    Par défaut
    Salut,

    Ta demande est très floue, on ne sait pas trop ou tu en es, et ce que tu veux faire exactement.

    T'une manière générale, tu dois ajouter la webreference sous visual studio, et spécifier l'adresse du web service avec son WSDl, afin que .net génère les classes (webservices, méthodes et parametres).
    Avant toute choses, assure toi que ton webservice en PHP soit fonctionnel.

  3. #3
    Membre confirmé Avatar de KibitO
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 616
    Points : 606
    Points
    606
    Par défaut
    Justement tout est dans le titre et la description.. Je pensais être clair.

    Je veux créer un service web PHP pour qu'il soit consommé en C# via Visual Studio. Comment faire co-habiter ces deux environnements ?

    Merci.

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    314
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 314
    Points : 463
    Points
    463
    Par défaut
    Tu dis à un moment donné que tu crée un client en PHP, mais qu'il ne marche pas ...
    C'est confusant

    Donc :

    1- Oublie C# dans un premier temps
    2- Verifies que ton Webservice foncitonne correctement (avec un client en PHP si tu peux, ou autre).
    3- Une fois que ton webservice repond correctement, dans ton projet C#, ajoute une webreference. Ca aura pour effet de te demander l'url de ton webservice.
    4 - Entres l'url de ton webservice (celle du WSDL)
    5 - .Net va scrutter le WSDL et te générer les classes nécessaires (Services (si tu en as plusieurs, méthodes, paramètres et leurs types.

    En regle général, créer un client webservice SOAP en .Net te prends 30 secondes à déclarer, et 1 lignes de codes pour l'initialiser, puis 1 ligne de code pour l'utiliser.
    On peut difficilement faire plus simple.

    PS : images que ton webservice est deployé sur un autre serveur que ta machine, ca devrait t'aider.

    A tout hasard ....

    Fichier client :
    $wsdl = "http://url/Webservices.wsdl";

    Fichier WSDL :
    <soap:address location="http://URL/soap_server.php?action=Horloge"/>

    N'aurais tu pas oublié de remplir qqch ?

  5. #5
    Membre confirmé Avatar de KibitO
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 616
    Points : 606
    Points
    606
    Par défaut
    Merci, l'utilisation d'un web service sous VS ne me pose aucun souci, j'en ai utilisé des tas pendant 8 ans. Et l'url du WS donnée est un exemple, bien entendu que je remplace URL par l'adresse du serveur où se trouve le web service. Le fichier WSDL est généré par un outil car je me vois mal le créer entièrement à la main.

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    314
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 314
    Points : 463
    Points
    463
    Par défaut
    Alors retour au point de départ, on ne sait pas quel est ton problème.

Discussions similaires

  1. consommer un service Web C # à partir de PHP
    Par ghost10 dans le forum Langage
    Réponses: 0
    Dernier message: 22/04/2010, 23h35
  2. Réponses: 4
    Dernier message: 20/03/2010, 18h38
  3. Consommer service web php en .NET
    Par Lope_ dans le forum Services Web
    Réponses: 1
    Dernier message: 19/02/2010, 09h04
  4. [AXIS] Consommer un service web PHP
    Par Nicoin dans le forum Services Web
    Réponses: 7
    Dernier message: 18/02/2006, 16h43

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