Ho due applicazioni .NET che comunicano tra loro su una named pipe. Tutto è perfetto la prima volta, ma dopo che il primo messaggio è stato inviato, e il server sta per ascoltare di nuovo, il metodo WaitForConnection()
genera un messaggio . Il tubo è rotto.
Perché sto ricevendo questa eccezione qui? Questa è la prima volta che lavoro con i tubi, ma un modello simile ha funzionato per me in passato con le prese.System.IO.Exception: Pipe è rotto
Codice ahoy!
Server:
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 prima chiamata a sendDownPipe ottiene il server per stampare il messaggio che viene inviato bene, ma quando si ritorna indietro fino ad ascoltare di nuovo, poppe.
Penso che il motivo si stanno avendo questo problema è a causa della linea "new StreamReader (tubo)". L'ambito del lettore di stream creato è il primo ciclo while e viene quindi ricreato. Tuttavia, il comportamento dei lettori di stream è quello di chiudere il flusso che stanno eseguendo il wrapping, quindi una volta fuori portata chiuderà il flusso del tubo. Puoi provare a spostare la sua dichiarazione fuori dal ciclo while e controllare (P.S: Non ho provato personalmente se il codice funziona se lo fai - volevo semplicemente aggiungere un commento piuttosto che una risposta) – user3141326