Bonjour tout le monde,

J'ai un soucis avec mon callback contrat.

Mon Winform se fige lors de l'appel.

Etant donné que mon traitement est long, c'est assez pénalisant pour l'utilisateur.

Voici comme je procède :

Je créer deux interface sur mon serveur :

Une interface de service avec ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
CallbackContract = typeof(IserviceRappel))]
Et une interface de rappel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
[OperationContract(IsOneWay = true)]
void Bonjour(string message);
Sur l'implémentation de mon service je mets :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant, InstanceContextMode = InstanceContextMode.PerCall)]
[CallbackBehavior(UseSynchronizationContext = true)]
public class Service1 : IService
Ensuite sur mon 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
24
25
26
27
28
29

private delegate void MAJ(string a);
MAJ miseajour;
DuplexChannelFactory<client.ServiceReference1.IService> channelFactory = null;
IService service;

public Form1()
{
            InitializeComponent();
            channelFactory = new DuplexChannelFactory<IService>(this, "WSDualHttpBinding_IService");
            service =  channelFactory.CreateChannel();
           miseajour = new MAJ(maj);

....
...


public void Bonjour(string message)
        {
           //test = message;
            this.Invoke(miseajour, new object[] { message });
        }
        

        public void maj(string a)
        {
            this.label1.Text = a;
        }

Dans les différentes sources sur le net, j'ai vu qu'il fallait créer un servicehost.

Est ce que cette étape est obligatoire ?

Mon winform ne peut il pas consommer mon webservice de façon directe ?

Et surtout n'y a t il pas un moyen de lancer ma requête client sans que celui ci ne se fige ?

Merci d'avance de vos suggestions.