我有一个循环运行的程序,每次迭代运行在不同的线程中,我正在创建打开新服务主机的新进程:
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 0360/pipea0360 0360。这通常是由不正确的地址或SOAP操作造成的。有关更多详细信息,请参见InnerException。
我的问题是,我可以平行打开的管道数目是否有限制?
是因为我打开了这么多的程序吗?
发布于 2012-09-13 19:10:20
您是否排除了竞争条件,即客户端试图连接到服务器尚未建立的管道?如果服务器上有很多活动线程,那么它可以很容易地延迟本应开始侦听的线程。这可以解释为什么它在一开始就起作用了。
通常,为每个客户端设置一个服务器线程并不能很好地扩展;使用线程池方法可以获得更好的性能。
https://stackoverflow.com/questions/12405134
复制相似问题