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 :
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 [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()); } } }
Côté client, pour vérifier que le client est bien connecté au pipe, j'utilise lq propriété IsConnected.
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 { } } }
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?
Partager