Bonjour,
J'essaie de faire un truc un peu compliqué... et je ne suis pas loin du but !
J'ai une appli WinForm (C# 2.0) qui va chercher ses données en base SQL Server 2005 via un WebService (C# 2.0). Il n'y a donc pas d'accès direct entre l'appli et la base, le WebService jouant le rôle de proxy.
Le but est d'exécuter une procédure stockée et d'afficher dans mon client les messages d'information de la proc stock en temps réel dans mon client.
Je suis arrivé à le faire quand mon client est directement connecté à la base (grâce à ce thread : http://www.developpez.net/forums/d [...] mme-csharp)
Par contre, avec le WebService au milieu, ça ne fonctionne pas entièrement.
Je me suis beaucoup inspiré de l'article ici :
http://www.codeproject.com/KB/webs [...] vents.aspx
--------
Au cas où ça pourrait aider, voici mon code.
Partie serveur
Code :
- private static string _message;
- /// <summary>
- /// Launches batches
- /// </summary>
- [WebMethod]
- public void Batches_Launcher()
- {
- using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["GAIA"].ConnectionString))
- {
- connection.Open();
- connection.FireInfoMessageEventOnUserErrors = true;
- connection.InfoMessage += new SqlInfoMessageEventHandler(connection_InfoMessage);
- SqlCommand cmd = new SqlCommand("exec dbo.batches_Launcher null, '2008-10-15', '2008-06-30', 1", connection);
- cmd.CommandTimeout = 3600;
- cmd.ExecuteNonQuery();
- connection.Close();
- }
- }
- /// <summary>
- ///
- /// </summary>
- private void connection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
- {
- _message = e.Message;
- _client.GetActiveClientsCompleted.Set();
- }
- /// <summary>
- ///
- /// </summary>
- [WebMethod]
- public string GetMessage()
- {
- _client.GetActiveClientsCompleted.WaitOne();
- return "ok : " + _message;
- }
- private static ClientState _client = new ClientState();
- /// <summary>
- ///
- /// </summary>
- private class ClientState
- {
- public System.Threading.AutoResetEvent GetActiveClientsCompleted = new System.Threading.AutoResetEvent(false);
- }
|
Partie client
Code :
- Service service = new Service();
- /// <summary>
- /// Estimates and displays duration
- /// </summary>
- private void EstimateDuration()
- {
- Service service = new Service();
- service.GetMessageCompleted += new GetMessageCompletedEventHandler(service_GetMessageCompleted);
- service.Batches_Launcher();
- service.GetMessageAsync();
- }
- /// <summary>
- ///
- /// </summary>
- void service_GetMessageCompleted(object sender, GetMessageCompletedEventArgs e)
- {
- textBox1.AppendText(e.Result + Environment.NewLine);
- service.GetMessageAsync();
- }
|
Désolé pour les variables et classe dont vous ne voyez pas la déclaration.
Mais globalement, mon code fonctionne puisque dans mon client le dernier message renvoyé pas SQL s'affiche bien. Mais les messages d'avant qui devraient apparaître les uns après les autres et espacés de qq secondes ne s'affichent pas...
Merci bien pour votre aide 
Message édité par Roodie le 18-10-2008 à 20:14:07