2008-10-28 4 views
2

Quelle est la bonne façon de configurer un canal nommé en C# sur un réseau?C# 3.5 - Connecter un canal nommé à travers le réseau

Actuellement, j'ai deux machines, 'client' et 'serveur'.

serveur met en place sa conduite 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 

La machine « serveur » sont accessibles sur le réseau en allant sur "\\ serveur".

Chaque fois que j'exécute le programme, j'obtiens une exception System.UnauthorizedAccessException qui indique "L'accès au chemin est refusé". Le code fonctionne correctement lorsque j'exécute le serveur et le client sur ma machine locale et que je tente de me connecter à "." avec le client.

Répondre

-4

Il n'est pas possible d'utiliser des tuyaux nommés entre machines.

"L'adaptateur WCF-NetNamedPipe assure la communication inter-processus sur le même ordinateur "

http://msdn.microsoft.com/en-us/library/bb226493.aspx

+1

C'est Bizz Server, pas Windows doc. http://msdn.microsoft.com/en-us/library/aa365590(VS.85).aspx indique que cela devrait fonctionner! – weismat

+2

Cela peut être une limitation WCF. Les tuyaux nommés dans Windows (comme celui que la personne demande) peuvent fonctionner à travers les réseaux. De: http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeserverstream.aspx « Les canaux nommés peuvent être utilisés pour la communication interprocessus localement ou sur un réseau » Il y a quelques limitations - Limites locales seulement (donc au moment où vous frappez un routeur, il s'arrête) - Les anciennes versions de Windows (comme 2000) limitent à 10 connexions - Les tuyaux anonymes sont à une seule machine –

0

Regardez dans l'espace de noms System.Runtime.Remoting. IIRC, les tubes nommés sont une option pour le protocole utilisé par les canaux à distance.

+0

Je ne sais pas ce que je devrais regarder pour ... – Anton

4

Vous devez définir des autorisations sur NamedPipeServerStream afin que le client dispose des autorisations nécessaires pour accéder au canal.

Je regarde la méthode SetAccessControl de votre NamedPipeServerStream.

Questions connexes