什么是命名管道(net.pipe)限制



我有一个在循环中运行的程序,每个迭代都在不同的线程中运行,我正在创建新的进程来打开新的服务主机:

ServiceHost _host = new ServiceHost(_service, new Uri("net.pipe://localhost/" + i_PipeName));
_host.AddServiceEndpoint(typeof(ICommandService), new NetNamedPipeBinding() { TransferMode = TransferMode.Buffered }, i_PipeName);
_host.Open();

从我的主程序中,我通过以下方式连接到open.net管道:

ICommandService ServiceProxy = ChannelFactory<ICommandService>.CreateChannel
(new NetNamedPipeBinding(), new EndpointAddress(@"net.pipe://localhost/" + i_PipeName" + @"/" + i_PipeName));

因此,我的问题是,在前200多次过程/迭代中,它运行良好,我可以打开连接并传递消息,但稍后会出现错误:

没有在侦听的终结点网pipe://localhost/pipea0360/pipea0360可以接受消息这通常是由不正确的地址或SOAP操作引起的。有关更多详细信息,请参见InnerException(如果存在)。

我的问题是,我可以并行打开的管道数量是否有任何限制
这是因为我开了那么多的直肠吗?

您是否排除了竞争条件,即客户端试图连接到服务器尚未建立的管道?如果服务器上有很多活动线程,那么很容易延迟本应开始侦听的线程。这可以解释为什么它一开始就有效。

一般来说,为每个客户端提供一个服务器线程并不能很好地扩展;使用线程池方法可以获得更好的性能。

最新更新