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

时间:2012-09-13 11:23:54

标签: c# .net named-pipes 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();
从我的主程序

我以下列方式连接到打开的.net管道:

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

所以我的问题是,对于前200个进程/迭代它工作正常,我可以打开连接并传递消息,但稍后会出现错误,开始出现:

  

没有终点收听   net.pipe:// localhost / pipea0360 / pipea0360可以接受   信息。这通常是由错误的地址或SOAP操作引起的。   如果存在,请参阅InnerException,以获取更多详细信息。

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

1 个答案:

答案 0 :(得分:3)

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

通常,为每个客户端设置服务器线程不能很好地扩展;使用线程池方法可以获得更好的性能。