2009-10-12 7 views
6

Actualmente estoy aprendiendo acerca de las canalizaciones con nombre en Windows utilizando ASP.NET 3.5 y C#. escribí un pequeño programa servidor que crea una canalización con nombre:Solo un cliente puede conectarse a un conducto con nombre

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

y una aplicación cliente de abrir la tubería de la siguiente manera:

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

Esto funciona muy bien, siempre y cuando sólo un cliente se conecta a la tubería . Puede leer y escribir. Si intento conectar un segundo cliente, el código nunca supera la línea

pipeStream.Connect(); 

Tanto el servidor y todos los clientes se están ejecutando en la misma máquina. Alguna idea?

¡Muchas gracias de antemano!

Respuesta

1

Gracias por la ayuda rápida.

Ya manejé el procesamiento real en hilos separados, pero olvidé mencionarlo. Un compañero de trabajo encontró el problema:

Tenía un StreamReader encerrado por otro bloque de uso en el bloque NamedPipeServerStream publicado en el lado del servidor.

Cuando este bloque terminó de cerrar el StreamReader, también desconectó el NamedPipeServerStream por algún motivo. Además, no estaba encerrando el pipeStream.WaitForConnection() en un bucle.

+1

así que puede cerrar la pregunta)) – 0100110010101

0

Una tubería real (la de la tienda hardwre) tiene dos terminaciones. Por lo tanto, esperaría que la tubería con nombre también tenga exactamente dos puntos finales, uno para el proceso del servidor y otro para el proceso del cliente.

Sin embargo, no importa cuál sea la respuesta final, sugiero echarle un vistazo a WCF: admite el enlace neto de tuberías (y muchas otras como TCP binario, SOAP con o sin WS- * solo cambiando el config) y maneja la activación del servidor y multi threading para usted. .net 3.5 está disponible, así que definitivamente optaría por él.

Cuestiones relacionadas