Tengo dos aplicaciones .NET que se comunican entre sí por una tubería con nombre. Todo está bien la primera vez, pero después de que se envía el primer mensaje, y el servidor va a volver a escuchar, el método WaitForConnection()
arroja un System.IO.Exception
con el mensaje El tubo está roto.
¿Por qué recibo esta excepción aquí? Esta es la primera vez que trabajo con tuberías, pero un patrón similar me ha funcionado en el pasado con conectores.System.IO.Exception: Pipe está roto
Code ahoy!
Servidor:
using System.IO.Pipes;
static void main()
{
var pipe = new NamedPipeServerStream("pipename", PipeDirection.In);
while (true)
{
pipe.Listen();
string str = new StreamReader(pipe).ReadToEnd();
Console.Write("{0}", str);
}
}
Cliente:
public void sendDownPipe(string str)
{
using (var pipe = new NamedPipeClientStream(".", "pipename", PipeDirection.Out))
{
using (var stream = new StreamWriter(pipe))
{
stream.Write(str);
}
}
}
La primera llamada a sendDownPipe obtiene el servidor para imprimir el mensaje que envío muy bien, pero cuando se vuelve de nuevo a escuchar de nuevo, se hace caca.
Creo que la razón por la que está teniendo este problema se debe a la línea de "nuevo StreamReader (pipa) ". El alcance del lector de flujo creado es el primer ciclo while y luego se vuelve a crear. Sin embargo, el comportamiento de los lectores de flujo es cerrar la secuencia que envuelven; por lo tanto, una vez que esté fuera del alcance, cerrará la transmisión de canalización. Puede intentar mover su declaración fuera del ciclo while y verificar (P.S: No lo intenté personalmente si el código funciona si lo hace - solo quería agregar un comentario en lugar de responder) – user3141326