C# 只有一个客户端可以连接到命名管道

C# 只有一个客户端可以连接到命名管道,c#,asp.net-3.5,named-pipes,C#,Asp.net 3.5,Named Pipes,我目前正在学习使用ASP.NET 3.5和C#在Windows中命名管道。 我编写了一个小型服务器程序,用于创建命名管道: using (NamedPipeServerStream pipeStream = new NamedPipeServerStream(pipeName)) { pipeStream.WaitForConnection(); // do sth. } 客户端应用程序打开管道,如下所示: using (NamedPipeClientStream pipeStream

我目前正在学习使用ASP.NET 3.5和C#在Windows中命名管道。 我编写了一个小型服务器程序,用于创建命名管道:

using (NamedPipeServerStream pipeStream = new NamedPipeServerStream(pipeName))
{
  pipeStream.WaitForConnection();
  // do sth.
}
客户端应用程序打开管道,如下所示:

using (NamedPipeClientStream pipeStream = new NamedPipeClientStream(pipeName))
{ 
  pipeStream.Connect();
  // do sth.
}
只要只有一个客户端连接到管道,这种方法就非常有效。它既能读也能写。如果我尝试连接第二个客户端,代码永远不会超过行

pipeStream.Connect();
服务器和所有客户端都在同一台计算机上运行。 有什么想法吗


提前非常感谢

您可以在此处查找一些信息:

在MSDN中:

据我所知,您应该创建一个多线程应用程序。主螺纹应负责将来的连接,并且每个新连接应在新螺纹中启动。

真正的管道(从hardwre商店购买的管道)有两个末端。因此,我希望命名管道也有两个端点,一个用于服务器进程,另一个用于客户端进程


但是,不管最终的答案是什么,我建议您看看WCF——它支持网络管道绑定(以及许多其他功能,如二进制TCP、带或不带WS-*规范的SOAP,只需更改配置即可),并为您处理服务器激活和多线程。net 3.5是可用的,所以我一定会选择它。

谢谢您的快速帮助

我已经在单独的线程中处理了真正的处理,但忘记了提到这一点。 但一位同事发现了问题:

在服务器端发布的NamedPipeServerStream using块中,我有一个StreamReader被另一个using块包围


当此块完成关闭StreamReader时,出于某种原因,它还断开了NamedPipeServerStream的连接。另外,我没有将pipeStream.WaitForConnection()封装在一个循环中。

请在这里查看我的答案。

因此,您可以结束这个问题。)