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/pipe0360/pipe0360 でリッスンしているエンドポイントはありませんでした。これは、多くの場合、アドレスまたは SOAP アクションが正しくないことが原因です。詳細については、存在する場合は InnerException を参照してください。

私の質問は、同時に開くことができるパイプの数に制限があるかどうかです。
これは、非常に多くのプロセスを開いているためですか?

4

1 に答える 1

3

サーバーがまだ確立していないパイプにクライアントが接続しようとしている競合状態を除外しましたか? サーバー上に多くのアクティブなスレッドがある場合、リッスンを開始するはずのスレッドが簡単に遅れる可能性があります。それが最初に機能する理由を説明できます。

一般に、クライアントごとにサーバー スレッドを使用すると、スケーリングがうまくいきません。スレッド プール アプローチを使用すると、パフォーマンスが向上します。

于 2012-09-13T19:10:20.637 に答える