Bonjour,
Mon problème est simple mais n'est pas simple à expliquer, je suis en train de travailler sur un service WCF asynchrone, mais lorsque mon service doit rappeler mon client, il n'execute pas la méthode.
Voici le code des différentes parties
Client
Communication
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 #region binding du service NetTcpBinding binding = new NetTcpBinding(); // I think most (or all) of these are defaults--I just copied them from app.config: binding.SendTimeout = TimeSpan.FromMinutes(1); binding.OpenTimeout = TimeSpan.FromMinutes(1); binding.CloseTimeout = TimeSpan.FromMinutes(1); binding.ReceiveTimeout = TimeSpan.FromMinutes(10); binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; binding.MaxReceivedMessageSize = 2147483647; EndpointAddress endpointAdress = new EndpointAddress("net.tcp://localhost:8018/Communication"); #endregion myChannelFactory = new DuplexChannelFactory<ICommunication>(this, binding, endpointAdress); myChannelFactory.Open(); myService = myChannelFactory.CreateChannel(); myService.EnvoyerResultat(); public void AppelRetour() { Console.WriteLine("test"); MessageBox.Show("Retour"); }
ICommunication
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class Communication : ICommunication { public void EnvoyerResultat() { Console.WriteLine("Début EnvoyerResultat"); OperationContext context = OperationContext.Current; ICommunicationRappel client = context.GetCallbackChannel<ICommunicationRappel>(); Thread.Sleep(3000); if (client != null) client.AppelRetour(); Console.WriteLine("Fin EnvoyerResultat"); } }
ICommunicationRappel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 [ServiceContract(CallbackContract = typeof(ICommunicationRappel))] public interface ICommunication { [OperationContract(IsOneWay = true)] void EnvoyerResultat(); }
a noter, le programme execute le code jusqu'au "client.AppelRetour();" mais n'affiche jamais ma messageBox !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public interface ICommunicationRappel { [OperationContract(IsOneWay = true)] void AppelRetour(); }
J'espère avoir été clair, n'hésitez à demander de plus amples informations
Suite à une discussion, ces informations peuvent se révéler intéressantes
Oui oui en synchrone ça fonctionne, mon service tourne déjà, j'utilise dans mon programme d'autre fonction en synchrone mais je voulais en ajouter des asynchrone maintenantJe me suis basé sur ces codes ci pour écrire le mien http://www.supinfo-projects.com/fr/2006/netfx3_wcf/5/ et le tuta Chatez avec WCF qui ce dernier à pour ainsi dire le même code que moi j'ai analysé les méthodes de connexion de l'utilisateur au chat
Partager