Bonjour,

Je suis en train d'implémenter un système nécessitant une communication entre deux programmes, un client et un serveur.

J'utilise pour ça un NamedPipe, basé sur un DuplexChannel.

Mon serveur se lance comme suit :
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
[ServiceBehavior(InstanceContextMode = InstanceContextMode::Single)]
ref class WCFGraphServer: public IGraphDebugProxy
{
	void OnOpen()
	{
		try
		{
			m_host = gcnew ServiceHost(this, gcnew Uri("net.pipe://localhost/GraphService"));
			m_host->AddServiceEndpoint("***********.GraphDebug.IGraphDebugProxy", gcnew NetNamedPipeBinding(), "GraphDebugPipe");
			m_host->Open();
		}
		catch (InvalidOperationException ^e)
		{
			Console::WriteLine(e->ToString());
		}
	}
}
Et mon client comme suit :
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
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    public class Client: IClient
    {
        public void ConnectToServer()
        {
            pipe =
                new DuplexChannelFactory<IGraphDebugProxy>(
                    this, 
                    new NetNamedPipeBinding(), 
                    new EndpointAddress("net.pipe://localhost/GraphService/GraphDebugPipe"));

            Server = pipe.CreateChannel();
        }

        public bool IsConnected
        {
            get
            {
                return !faulted
                    && pipe.State != CommunicationState.Closed
                    && pipe.State != CommunicationState.Faulted;
            }

            private set { }
        }
    }
Côté client, pour vérifier que le client est bien connecté au pipe, j'utilise lq propriété IsConnected.

Dans l'immédiat, la variable faulted est toujours à false.

J'obtiens l'exception du titre dans le cas où je tente d'envoyer un message au server sans que celui-ci ne soit connecté.

Ma question est : comment je peux faire pour déterminer si le serveur est bien présent sur le pipe?