C # 3.5 - Connexion du canal nommé à travers le réseau
-
04-07-2019 - |
Question
Quelle est la bonne façon de configurer un canal nommé en C # sur un réseau?
Actuellement, j'ai deux machines, "client" et "serveur".
Le serveur configure son canal de la manière suivante:
NamedPipeServerStream pipeServer = new NamedPipeServerStream(
"pipe",
PipeDirection.InOut,
10,
PipeTransmissionMode.Byte,
PipeOptions.None)
pipeServer.WaitForConnection();
//... Read some data from the pipe
Le client établit sa connexion de la manière suivante:
NamedPipeClientStream pipeClient = new NamedPipeClientStream(
"server",
"pipe",
PipeDirection.InOut);
pipeClient.Connect(); //This line throws an exception
//... Write some data to the pipe
Vous pouvez accéder à la machine "serveur" sur le réseau en allant sur "\\ serveur".
Chaque fois que j'exécute le programme, une exception System.UnauthorizedAccessException indique que "l'accès au chemin est refusé". Le code fonctionne correctement lorsque j'exécute le serveur et le client sur mon ordinateur local et que je tente de me connecter à ". & Quot; avec le client.
La solution
Il n'est pas possible d'utiliser des canaux nommés entre des machines.
"L'adaptateur WCF-NetNamedPipe assure la communication entre processus sur le même ordinateur "
.Autres conseils
Vous devez définir des autorisations sur NamedPipeServerStream afin que le client dispose des autorisations nécessaires pour accéder au canal.
Je regarderais la méthode SetAccessControl de votre NamedPipeServerStream.
Recherchez dans l'espace de noms System.Runtime.Remoting. IIRC, les canaux nommés sont une option pour le protocole utilisé par les canaux distants.