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

C# Discussion :

Difficultée dans la conception d'une classe pour service web


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut Difficultée dans la conception d'une classe pour service web
    Bonjour à tous,

    Je souhaite faire un petit programme interrogeant un service web me permettant d'interroger des données provenant d'un logiciel de type ERP.

    Je souhaite donc crée une classe CServiceWeb avec des méthodes comme :

    Login()
    GetClients(string nom)
    GetXXXX()
    GetYYYY()

    Mon problème réside dans le fait que j'avais l'habitude de travailler en synchrone, or, je développe ceci dorénavant en Asynchrone....et là....c'est le drame, je ne sais pas comment concevoir ma classe afin de gérer la réception des données...

    Pour mieux exprimer ma difficultée, voici ma "petite" classe que j'ai commencé à concevoir :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
     
     
    namespace Gate
    {
        public class CWebServiceDiva
        {
            public string   m_strUserDiva       { get; set; }
            public string   m_strPwdDiva        { get; set; }
            public string   m_strURLWebService  { get; set; }
            public string   m_strRetour         { get; set; }
            public int      m_nRetour           { get; set; }
     
            private DivaltoServiceSoapClient Ws_Client;
     
            public CWebServiceDiva()
            {
                Ws_Client = new DivaltoServiceSoapClient();
                Ws_Client.WebServiceDivaCompleted += new EventHandler<WebServiceDivaCompletedEventArgs>(client_WebServiceDivaCompleted);   
            }
     
            public void Execute(string strAction, string strParam)
            {
                Ws_Client.WebServiceDivaAsync("<ACTION>" + strAction, strParam);
            }
     
            public bool TestLogin()
            {
                Execute("AI_SW_LOGIN", "<Auth><User>" + m_strUserDiva + "</User><Pass>" + m_strPwdDiva + "</Pass></Auth>");
                if (m_nRetour == 0)
                {
                    MessageBox.Show("Authentification réussie avec succès !! ", "gAte", MessageBoxButton.OK);
                }
                else
                {
                    MessageBox.Show("Echec lors de l'authentification !! ", "gAte", MessageBoxButton.OK);
                }
                return true;
            }
     
            private void client_WebServiceDivaCompleted(object sender, WebServiceDivaCompletedEventArgs e)
            {
                m_strRetour = e.retour;
                m_nRetour   = e.Result;
            }
     
        }
    }
    Comme vous l'avez vu, j'ai fait une fonction Execute() qui permet d'invoker n'importe quelle fonction du service web.

    Cette fonction Execute() est elle même invokée dans ma fonction Login().


    Mon problème :

    Sur mon IHM, j'ai déposé un bouton " Tester Connexion". Derriere ce bouton, j'appelle ma fonction LOGIN().

    Je souhaite qu'a la réponse du service web, un messagebox affiche le résultat de la réponse.

    Comme je suis en asynchrone, il faudrait donc que mon messagebox soit implémenté dans la fonction évenementielle "client_WebServiceDivaCompleted()". Jusque là, je suis d'accord.

    Mon problème est que, dans le cas du Login, je veux afficher un messagebox, mais dans le cas des autres fonction, je voudrais faire d'autres choses, notamment afficher une autre page,etc....

    Il me faudrait donc une fonction évenementielle par Fonction de service web invoquée ?

    Il me faudrait sinon rendre ce service web synchrone avec un mécanisme de variable ?

    Que me conseillez vous ? Je suis un peu perdu dans la conception de ma classe et j'avoue qu'une aide serait la bienvenue

    Merci à tous,

    Bien cordialement,

    Nixeus

  2. #2
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    bonsoir,

    j'ai du mal a comprendre ta démarche en sachant, que dans la logique ton authentification peut passer directement dans l'entête soap.

    as tu lu cela

    merci

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonsoir et merci de ta réponse,

    La méthode LOGIN est juste un exemple.
    Le login est une méthode du service web a part, ou je vérifie manuellement du côté de mon ERP les infos d'authentification.

    Je souhaite créer plusieurs méthodes pour mon service web ( getClients(), getProspect(), getFournisseurs()), mais, comment gérer l'éveneentiel.

    Comprends tu mon problème déja ?

  4. #4
    Membre confirmé

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Points : 574
    Points
    574
    Par défaut
    Le principe de l'asynchrone, c'est que pendant que ton programme attend la réponse du web-service, il peut faire autre chose (par exemple redessiner la fenêtre puisque tu es en WinForms). Tu n'as donc pas trop le choix pour moi :
    Il me faudrait donc une fonction évenementielle par Fonction de service web invoquée ?
    => oui, ou en tout cas une fonction par type de réponse à effectuer
    "C'est tellement merdique que toute modification est une amélioration !"

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonjour et merci de ta réponse,

    Donc si je dois faire un évenement par action de service web, je dois mettre cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ws_Client.WebServiceDivaCompleted += new EventHandler<WebServiceDivaCompletedEventArgs>(client_WebServiceDivaCompleted);
    Dans ma méthode Login() et non dans mon constructeur !
    C'est ça ?

Discussions similaires

  1. [VB6] load de shapes dans une classe ? (pour faire des contours)
    Par hpfx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/06/2011, 14h59
  2. [Source] Une classe pour imprimer directement dans un fichier
    Par Delbeke dans le forum Vos contributions VB6
    Réponses: 0
    Dernier message: 26/05/2009, 18h00
  3. thread dédié à une classe pour lui "donner vie"
    Par Dje14 dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 02/06/2005, 16h46
  4. Réponses: 7
    Dernier message: 08/01/2005, 13h24
  5. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28

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