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 :
Comme vous l'avez vu, j'ai fait une fonction Execute() qui permet d'invoker n'importe quelle fonction du service web.
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; } } }
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
Partager