2009-10-12 5 views
6

Ich lerne derzeit über Named Pipes in Windows mit ASP.NET 3.5 und C#. Ich schrieb ein kleines Server-Programm, das eine Named Pipe erzeugt:Nur ein Client kann eine Verbindung zu Named Pipe herstellen

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

und eine Client-Anwendung das Rohr wie diese Öffnung:

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

Dies funktioniert gut, solange nur ein Client mit dem Rohr verbindet . Es kann lesen und schreiben. Wenn ich versuche, einen zweiten Client zu verbinden, überschreitet der Code nie die Linie

pipeStream.Connect(); 

den Server und alle Clients auf demselben Rechner ausgeführt werden. Irgendwelche Ideen?

Vielen Dank im Voraus!

Antwort

1

Danke für die schnelle Hilfe.

Ich habe bereits die eigentliche Verarbeitung in separaten Threads behandelt, aber vergessen, dies zu erwähnen. Ein Mitarbeiter hat das Problem jedoch gefunden:

Ich hatte einen StreamReader, der von einem anderen umschlossen wird, der Block in dem veröffentlichten NamedPipeServerStream-using-Block auf der Serverseite verwendet.

Wenn dieser Block den StreamReader beendet hat, wurde auch der NamedPipeServerStream aus irgendeinem Grund getrennt. Außerdem habe ich pipeStream.WaitForConnection() nicht in eine Schleife eingeschlossen.

+1

Also, Sie können die Frage schließen)) – 0100110010101

0

Ein echtes Rohr (das aus dem Hardwre Store) hat zwei Endungen. Ich würde also erwarten, dass die Named Pipe genau zwei Endpunkte hat, einen für den Serverprozess und einen für den Clientprozess.

Egal, was die endgültige Antwort ist, würde ich vorschlagen, WCF zu sehen - es unterstützt Net-Pipe-Bindung (und viele andere wie TCP, SOAP mit oder ohne WS-* specs nur durch die Änderung der config) und übernimmt die Server-Aktivierung und Multi-Threading für Sie. .net 3.5 ist verfügbar, also würde ich mich definitiv dafür entscheiden.