2009-10-12 62 views
6

現在、ASP.NET 3.5およびC#を使用しているWindowsの名前付きパイプについて学習中です。 私は名前付きパイプを作成し、小規模なサーバプログラムを書いた:名前付きパイプに接続できるクライアントは1つだけです

using (NamedPipeServerStream pipeStream = new NamedPipeServerStream(pipeName)) 
{ 
    pipeStream.WaitForConnection(); 
    // do sth. 
} 

と、このようにパイプを開くクライアントアプリケーション:

using (NamedPipeClientStream pipeStream = new NamedPipeClientStream(pipeName)) 
{ 
    pipeStream.Connect(); 
    // do sth. 
} 

これがある限り1つのクライアントだけがパイプに接続して素晴らしい作品。読み取りと書き込みの両方が可能です。 2番目のクライアントに接続しようとすると、コードは行を超えません。

pipeStream.Connect(); 

サーバーとすべてのクライアントが同じマシン上で実行されています。 アイデア

ありがとうございます!

答えて

1

速いヘルプありがとうございます。

私は既に別のスレッドで実際の処理を行っていましたが、言及するのを忘れました。 共同作業者が問題を発見しました:

私は、サーバーサイドの投稿されたNamedPipeServerStream使用ブロックの別の使用ブロックで囲まれたStreamReaderを持っていました。

このブロックがStreamReaderの終了を完了すると、何らかの理由でNamedPipeServerStreamの接続も解除されました。また、私はループ内でpipeStream.WaitForConnection()を囲んでいませんでした。

+1

ですので、質問を閉じることができます)) – 0100110010101

4

あなたはここでの情報のいくつかを調べることができます。 Number of Clients that can connect to a Named Pipe

、ここをMSDNで:私が理解からhttp://msdn.microsoft.com/en-us/library/aa365594%28VS.85%29.aspx

は、あなたがマルチスレッドアプリケーションを作成する必要があります。メインスレッドは将来の接続を担当し、新しいスレッドごとに新しい接続を開始する必要があります。

0

実際のパイプ(ハードウェアストアからのパイプ)には2つのエンディングがあります。だから私は、名前付きパイプにもちょうど2つのエンドポイントがあることを期待したいと思います.1つはサーバープロセス用で、もう1つはクライアントプロセス用です。

しかし、最終的な答えが何であれ、私はWCFを見てみることをお勧めします - ネットパイプバインディング(バイナリTCP、WS- *仕様の有無にかかわらずSOAPのようなものが多数サポートされています。 config)を実行し、サーバーのアクティブ化とマルチスレッドを処理します。 .net 3.5が利用できるので、私は間違いなくそれを選ぶだろう。

関連する問題