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
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");
    }
Communication
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");
    }
}
ICommunication
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();
}
ICommunicationRappel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
public interface ICommunicationRappel
{
    [OperationContract(IsOneWay = true)]
    void AppelRetour();
}
a noter, le programme execute le code jusqu'au "client.AppelRetour();" mais n'affiche jamais ma messageBox !

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 maintenant
Je 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