其他分享
首页 > 其他分享> > 命名管道(net.pipe)的限制是什么?

命名管道(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个流程/迭代而言,它可以正常工作,我可以打开连接并传递消息,但随后又开始出现错误:

There was no endpoint listening at
net.pipe://localhost/pipea0360/pipea0360 that could accept the
message. This is often caused by an incorrect address or SOAP action.
See InnerException if present, for more details.

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

解决方法:

您是否排除了争用条件,即客户端试图连接到服务器尚未建立的管道?如果服务器上有许多活动线程,则很容易延迟应该开始监听的线程.那可以解释为什么它在一开始就起作用.

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

标签:named-pipes,c,net,net-pipe
来源: https://codeday.me/bug/20191127/2075816.html