如何通过网络使用命名管道?

| 我正在尝试通过命名管道通过网络创建连接。我正在按照msdn中的说明进行操作。我用功能创建管道服务器端。
CreateNamedPipe(
                     \"\\\\\\\\.\\\\pipe\\\\myNamedPipe\",
                     DUPLEX | FILE_FLAG_OVERLAPPED,
                     0,
                     255,
                     BUFFER_SIZE,
                     BUFFER_SIZE,
                     0,
                     IntPtr.Zero);
并尝试通过CreateFile()函数进行连接
CreateFile(
                  \"\\\\\\\\10.0.0.29\\\\pipe\\\\myNamedPipe\",
                  GENERIC_READ | GENERIC_WRITE,
                  0,
                  IntPtr.Zero,
                  OPEN_EXISTING,
                  FILE_FLAG_OVERLAPPED,
                  IntPtr.Zero);
10.0.0.29是服务器计算机ip。如果我尝试在服务器计算机上使用管道名称\“ \\\\。\\ pipe \\ myNamedPipe \”或\“ \\\\ 10.0.0.29 \\ pipe \\ myNamedPipe \”运行客户端程序(10.0.0.29是服务器ip)或\“ \\\\ localhost \\ pipe \\ myNamedPipe \”可以正常工作。 那么如何通过网络使用命名管道呢?     
已邀请:
从3.5版开始,.NET Framework本地支持命名管道,您不必使用乏味的interop p / invoke代码。请参阅此处的介绍文章:.NET 3.5为示例添加了命名管道支持。 使用此构造函数重载NamedPipeClientStream构造函数(字符串,字符串),可以传递服务器名称参数。     
我认为上面已经回答了这个问题,但是请记住,使用向远程计算机打开的命名管道存在很大的问题。当您使用超时大于0的时间调用Windows API函数WaitNamedPipe时,调用线程将使用整个CPU,直到命名管道连接或超时。超时为0时,它没有足够的时间进行远程连接,因此,每次尝试连接时,您基本上都被迫使用所有CPU,而您所能做的就是超时,然后重试后来。 我遇到了这个问题,发现我并不孤单:http://social.msdn.microsoft.com/Forums/sv-SE/netfxnetcom/thread/7bbf5a0b-3c22-4836-b271-999e514c321b 在Microsoft提供一种更性能友好的方式连接到远程命名管道之前,我将完全停止使用它们,建议您也这样做。如果由于某种原因您几乎无法立即连接,那么您将获得一个活锁。     
Pipe Server必须具有一个名称,您需要为该服务器指定一个名称,而不是IP地址。 请参阅本教程。 但是,命名管道对于本地连接很方便,因为在网络上,使用命名管道会增加TCP封装的开销,从而不方便使用。 使用命名管道进行本地连接可以提高速度,但是通过网络使用并没有太大意义。     

要回复问题请先登录注册