locked
Tutoriel Windows Phone 7 – Appeler un service WCF dans Silverlight RRS feed

  • Discussion générale

  • Voici une description pas a pas pour creer un service WCF et l’appeler a partir d’une application Silverlight de Windows Phone 7.

     

    Premièrement, on doit créer le service WCF.

     

    Dans Visual Studio, créez un nouveau projet de type « Silverlight Windows Phone Application ». Dans la même solution, ajoutez un projet de type WCF Service. Vous devez avoir cette structure :

     

    Consultez le fichier IService1.cs et remarquez les attributs [ServiceContract] et [OperationContract] de l’interface et de la méthode créée par défaut, GetData. Ces attributs sont utilisés pour définir le fait que les méthodes déclarées par cette interface peuvent être utilisées par une application qui appelle le service.

     

    Nous allons déclarer notre propre méthode, avec l’attribut [OperationContract]. Cette méthode recevra une variable de type string comme paramètre et retournera un string aussi.

     

    [OperationContract]

    string MaMethode(string param);

     

     

    Ensuite, il faut définir cette méthode dans la classe Service1 du fichier Service1.svc.cs :

    public string MaMethode(string param)

            {

                throw new NotImplementedException();

            }

     

     

    Comme vous voyez, cette méthode lance une exception si on ne définit pas ses actions. Nous allons donc remplacer l’exception par une action de notre choix :

    public string MaMethode(string param)

            {

                return "salut " + param;

            }

     

     

    Maintenant, compilez la solution (F6) et ajoutez un référence au service dans l’application Silverlight :

     

    Appuyez sur le bouton « Discover » pour découvrir le service disponible :

     

    Des que le service est trouvé, on peut voir ses méthodes :

     

    Maintenant, une référence au service Service1 se trouve dans le projet WindowsPhoneApplication.

     

     

    Nous avons créé le service WCF et maintenant nous allons créer un interface Silverlight simple pour utiliser et afficher les résultats de ce service.

    Ajoutez un bouton et une boite de texte sur l’écran :

     

    Dans la page principale de l’application Silverlight (MainPage.xaml.cs) nous devons déclarer une variable de type Service1 et utiliser ses méthodes. On déclare la variable « sc » de type ServiceReference1.Service1Client :

    ServiceReference1.Service1Client sc = new ServiceReference1.Service1Client();

     

    Quand on analyse les méthodes de l’objet « sc », on voit qu’il n’a pas la méthode « MaMethode », définie dans l’interface, mais une méthode « MaMethodeAsync » et un événement « MaMethodeCompleted ». En fait, l’appel des méthodes des services se fait de manière asynchrone, et un événement est lancé quand l’exécution de la méthode est finie.

     

    Nous devons donc créer une méthode qui gère cet événement. Dans le constructeur de la classe MainPage, on écrit « sc.MaMethodeComplete += » et on tape TAB deux fois. Visual Studio fait le reste !

     

     

    Dans la méthode « sc_MaMethodeCompleted » nous allons utiliser la valeur retournée par la méthode « MaMethode ».  On trouve cette valeur dans « e.Result » :

    void sc_MaMethodeCompleted(object sender, ServiceReference1.MaMethodeCompletedEventArgs e)

            {

                this.textBox1.Text = e.Result;

            }

     

     

    La dernière chose a faire est d’appeler la méthode « MaMethode » du service. On fait ca dans l’événement Click du bouton. Et voila le code complet :

     

    public partial class MainPage : PhoneApplicationPage

        {

            ServiceReference1.Service1Client sc = new ServiceReference1.Service1Client();

     

            // Constructor

            public MainPage()

            {

                InitializeComponent();

                sc.MaMethodeCompleted += new EventHandler<ServiceReference1.MaMethodeCompletedEventArgs>(sc_MaMethodeCompleted);

     

            }

     

            void sc_MaMethodeCompleted(object sender, ServiceReference1.MaMethodeCompletedEventArgs e)

            {

                this.textBox1.Text = e.Result;

            }

     

            private void button1_Click(object sender, RoutedEventArgs e)

            {

                sc.MaMethodeAsync(this.textBox1.Text);

            }

        }

     

    mercredi 29 septembre 2010 21:42

Toutes les réponses

  • bonjour, Dommage que les captures écrans soient maintenant invalides

    Christophe

    mercredi 6 février 2013 08:08