Bonjour,
J'ai créé un service WCF qui fonctionne a merveille, et j'ai voulu ajouter des callback pour remonter les events coté serveur, au client.

Après avoir bouquiné les tutos, j'ai essayer d'appliquer les modifs a mon code mais j'ai un problème lors de ma tentative de connexion coté client.

Voici mon code coté serveur :

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
 
using System;
using System.ServiceModel;
using CIATControl.Contracts;
 
namespace CIATControl.BusinessLayer
{
    [ServiceContract (CallbackContract = typeof(IBusinessCallBack))]
    interface IAirControlService
    {
 
        [OperationContract]
        void Uta_SubscribeValues(int utaId);
 
        [OperationContract]
        void Uta_UnSubscribeValues(int utaId);
    }
}
Le CallbackContract (projet à part)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
using System.ServiceModel;
using CIATControl.Common;
 
namespace CIATControl.Contracts
{
    public interface IBusinessCallBack
    {
        [OperationContract(IsOneWay = true)]
        void OnAirControlValuesChanged(Enum_AirControlVariables variable, object objValue);
     }
}
La classe issue du CallBackContract coté 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
 
using System;
using CIATControl.Common;
 
namespace CIATControl.EasyGUI
{
    public class ContractAccess : CIATControl.Contracts.IBusinessCallBack
    {
 
        public delegate void UTAValuesChanged(Enum_AirControlVariables variable, object objValue);
 
        public event UTAValuesChanged OnUTAValuesChanged;
 
        public ContractAccess()
        {
        }
 
        public void OnAirControlValuesChanged(Enum_AirControlVariables variable, object objValue)
        {
            OnUTAValuesChanged(variable, objValue);
        }
 
    }
}
La connexion du client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 InstanceContext context = new InstanceContext(new ContractAccess());
utaClient = new AirControlServiceClient(context);
utaClient.Open();
Lorsque j'arrive sur la fonction Open, j'ai l'exception suivante :
InstanceContext fourni à ChannelFactory contient un UserObject qui n'implémente pas CallbackContractType 'CIATControl.EasyGUI.ServiceRefWCF.IAirControlServiceCallback'.
Cette erreur se produit d’abord lors de l’instanciation de "utaClient", et plus précisément dans sont paramètre InnerChannel.

Avant que j'ajoute le CallBack tout marchais bien, il doit y avoir quelque chose que je fais mal, mais je n'arrive pas trouver ce que c'est.
J'ai bien remis à jour mon "service references" du client.

Si quelqu'un a une piste, merci.