Bonjour,

Je souhaite développer une application de test/debug qui héberge l'implémentation d'un service WCF.

Voici un bout de code pour présenter un exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
    // Déclaration de l'interface contrat
    [ServiceContract(SessionMode = SessionMode.Required)]
    public interface IService1
    {
        [OperationContract]
        string Hello(string message);
    }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
    // Classe implémentant l'interface de contrat
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class Service1 : IService1
    {
        public Service1()
        { }
 
        public string Hello(string message)
        {
            return "Hello " + message;
        }
    }
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
30
 
    // IHM en WPF
    public partial class MainWindow : Window
    {
        private ServiceHost _Host1;
 
private void Start_OnClick(object sender, RoutedEventArgs e)
        {
            _Host1 = new ServiceHost(typeof(Service1));
 
            _Host1.Opening += HostOnOpening;
            _Host1.Opened += HostOnOpened;
            _Host1.Closing += HostOnClosing;
            _Host1.Closed += HostOnClosed;
 
            try
            {
                _Host1.Open();
                btStart.IsEnabled = false;
                lbJournal.Content += "\nService démarré";
            }
            catch (Exception ex)
            {
                btStart.IsEnabled = true;
                lbJournal.Content += "\nService ne peut pas démarrer" + ex.Message;
            }
        }
 
// ....
    }
Mon but est d'afficher dans l'interface principale un certain nombre d'informations côté serveur lorsqu'un client se connecte ou communique avec le serveur afin de pouvoir monitorer ce qui se passe.

J'ai récupéré les événements de connexion/déconnexion de l'hôte, mais mon problème est pour trouver comment faire communiquer les instances de Service1 avec l'hôte.

Comme je suis en Session Required, je ne peux pas créer un singleton et le passer à l'hôte. Les instances de Service1 sont automatiquement instanciées et je ne trouve pas de moyen pour les récupérer.

Il existerait un moyen, ce serait de déclarer une sorte d'intermédiaire global qui serait utilisé par la classe Service1 quand elle s'instancie et aussi par l'hôte mais je ne trouve pas cette solution très propre.

Est-ce que ma demande est prévue et supportée par WCF ou doit-on faire une solution plus "bidouille" ?

Merci par avance pour votre aide.