3

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

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(如果存在)。

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

4

1 回答 1

3

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

一般来说,每个客户端都有一个服务器线程并不能很好地扩展。您将使用线程池方法获得更好的性能。

于 2012-09-13T19:10:20.637 回答