Partage
  • Partager sur Facebook
  • Partager sur Twitter

Consommation d'un service web

Sujet résolu
    1 février 2012 à 20:17:51

    Bonsoir,

    Toujours dans le but d'apprendre comment fonctionne les services web, j'ai commencé a faire une petite solution avec 2 projets question de faire simple et de pouvoir comprendre, même si pour le moment j'ai des briques de connaissance que je ne sais pas mettre en oeuvre :lol:

    J'ai donc créé deux projets comme sur l'image ci-dessous :

    Image utilisateur

    Donc une console application WPF et pour le moment en service web de type WCF Service Application.

    Dans les fichiers Service1.svc.cs et IService1.cs j'ai simplifier le code au maximum en ne gardant que la fonction : GetData comme ci dessous :

    namespace WcfService1
    {
        // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
        public class Service1 : IService1
        {
            public string GetData(int value)
            {
                return string.Format("You entered: {0}", value);
            }
        }
    }
    


    Maintenant si j'ai bien compris, il faut que je créer un endpoint pour aller sur mon service Web. Actuellement mon service web est en local avec l'adresse suivante : http://localhost:22976/

    J'ai donc commencer à éditer le fichier de configuration de ma console pour mettre la chose suivante, mais là.... je sèche car j'ai vu un tas de choses sur le net et j'avoue que l'on trouve de tout mais j'arrive surtout à rien :p

    voici mon fichier de config :

    <?xml version="1.0"?>
    <configuration>
    
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
      
      <system.serviceModel>
        <services>
          <service>
            <endpoint address="http://localhost:22976/" binding="" contract="Service1.IService1" />
          </service>
        </services>
        
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
              <serviceMetadata httpGetEnabled="true"/>
              <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
     <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
      
    </configuration>
    


    Que mettre dans binding ? l'attribut contract est t-il bon ?

    Dans ma console je suppose que je devrais appeler mon service de la façon suivante :

    static void Main(string[] args)
            {
                Service1 s = new Service1();
                string test = s.GetData("test");
    
                Console.WriteLine(test );
    
                Console.ReadLine();
            }
    


    Suis-je sur la bonne voie ? ;)

    Merci d'avance de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      1 février 2012 à 20:42:03

      Je suis aps un pros du WCF, mais la façon dont tu utilise le Service dans ton code est erroné. (En fait, ça fontionne peut-être, mais ça m'étonnerais que se soit une méthode conseillé de faire.)

      Tu doit ajouter une "Référence Service" à ton projet.
      • Partager sur Facebook
      • Partager sur Twitter
        1 février 2012 à 21:30:09

        Citation : M4N!aC

        Je suis aps un pros du WCF, mais la façon dont tu utilise le Service dans ton code est erroné. (En fait, ça fontionne peut-être, mais ça m'étonnerais que se soit une méthode conseillé de faire.)

        Tu doit ajouter une "Référence Service" à ton projet.



        Mais si le service web est sur un serveur en ligne, pourquoi faut-il faire référence à ce service ? J'ai du mal a saisir.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          1 février 2012 à 21:47:43

          Pour pouvoir l'utiliser...
          Si je te dis "va demander à Jean quel temps il fera demain", tu n'as aucune idée de qui est Jean donc tu ne peux pas le faire. Si je te dis "Va demander à Jean - le mec avec un T-shirt vert et des jeans à l'autre bout de la pièce - quel temps il fera demain", c'est déjà plus facile.
          • Partager sur Facebook
          • Partager sur Twitter
            1 février 2012 à 22:16:15

            Citation : Aethec

            Pour pouvoir l'utiliser...
            Si je te dis "va demander à Jean quel temps il fera demain", tu n'as aucune idée de qui est Jean donc tu ne peux pas le faire. Si je te dis "Va demander à Jean - le mec avec un T-shirt vert et des jeans à l'autre bout de la pièce - quel temps il fera demain", c'est déjà plus facile.



            Jean ma dit qu'il allait faire très froid jusqu’à la fin de semaine :D

            Mon objectif c'est aussi de comprendre pourquoi il faut faire de cette façon. ;)

            Édite: J'ai donc mis a jours en faisant référence à mon service web et bien sûr ça fonction. Mais - je n'ai pas encore essayer - je pense que si la partie Web est mis en ligne cela ne fonctionnera plus car du coup que je mette ou non la ligne :

            <endpoint address="http://localhost:22976/" binding="basicHttpBinding" contract="Service1.IService1" />
            


            Ça fonctionne quand même. Est ce que j'ai raison ?
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              2 février 2012 à 12:32:48

              Evidemment, il faudra indiquer la "vraie" adresse du service une fois qu'il sera en ligne.
              • Partager sur Facebook
              • Partager sur Twitter
                2 février 2012 à 13:11:23

                Comme M4N!aC l'a indiqué, tu ne peux pas créer une référence directe entre ton projet console et ton service web. Le but n'est pas que ton exécutable se lie à la dll du service web, mais qu'il soit capable d'appeler le service web en ligne.

                Tu dois ajouter une "Service Reference" au service web et non une "Reference" tout court ; cela te génèrera une classe Service1Client dans ton appli cliente, dont l'interface sera la même que la classe Service1 du service web mais dont l'implémentation des méthodes consistera à appeler le service web en ligne (dont l'adresse doit être indiquée dans le fichier de config).
                • Partager sur Facebook
                • Partager sur Twitter
                  2 février 2012 à 19:06:02

                  Oups désolé, je n'ai pas fait la différente :(

                  Je vais essayer tout de suite.

                  Petite question au passage :

                  Si je fais une modification dans le service est ce que c'est automatiquement pris en compte ou il faut faire un rafraîchissement en rajoutant une nouvelle fois le référence au service ?
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Consommation d'un service web

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown