命名管道(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