mercredi 16 avril 2014

.net 3.5 - c# 3.5 - connexion de canal nommé sur réseau - Stack Overflow


What is the correct way to setup a named pipe in C# across a network?


Currently I have two machines, 'client' and 'server'.


Server sets up its pipe in the following manner:


NamedPipeServerStream pipeServer = new NamedPipeServerStream(
"pipe",
PipeDirection.InOut,
10,
PipeTransmissionMode.Byte,
PipeOptions.None)
pipeServer.WaitForConnection();
//... Read some data from the pipe

The client sets up its connection in the following manner:


NamedPipeClientStream pipeClient = new NamedPipeClientStream(
"server",
"pipe",
PipeDirection.InOut);
pipeClient.Connect(); //This line throws an exception
//... Write some data to the pipe

The 'server' machine can be accessed on the network by going to "\\server".


Whenever I run the program, I get a System.UnauthorizedAccessException that says "Access to the path is denied." The code works fine when I run the server and client on my local machine and attempt to connect to "." with the client.




It is not possible to used named pipes between machines.


"The WCF-NetNamedPipe adapter provides cross-process communication on the same computer"


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




You need to set permissions on the NamedPipeServerStream so that the client will have permissions to access the pipe.


I would look at the SetAccessControl method of your NamedPipeServerStream.




Look in the System.Runtime.Remoting namespace. IIRC, named pipes are one option for the protocol used by remoting channels.



What is the correct way to setup a named pipe in C# across a network?


Currently I have two machines, 'client' and 'server'.


Server sets up its pipe in the following manner:


NamedPipeServerStream pipeServer = new NamedPipeServerStream(
"pipe",
PipeDirection.InOut,
10,
PipeTransmissionMode.Byte,
PipeOptions.None)
pipeServer.WaitForConnection();
//... Read some data from the pipe

The client sets up its connection in the following manner:


NamedPipeClientStream pipeClient = new NamedPipeClientStream(
"server",
"pipe",
PipeDirection.InOut);
pipeClient.Connect(); //This line throws an exception
//... Write some data to the pipe

The 'server' machine can be accessed on the network by going to "\\server".


Whenever I run the program, I get a System.UnauthorizedAccessException that says "Access to the path is denied." The code works fine when I run the server and client on my local machine and attempt to connect to "." with the client.



It is not possible to used named pipes between machines.


"The WCF-NetNamedPipe adapter provides cross-process communication on the same computer"


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



You need to set permissions on the NamedPipeServerStream so that the client will have permissions to access the pipe.


I would look at the SetAccessControl method of your NamedPipeServerStream.



Look in the System.Runtime.Remoting namespace. IIRC, named pipes are one option for the protocol used by remoting channels.


0 commentaires:

Enregistrer un commentaire