C #: Entendimiento asincrónico de NamedPipeServerStream

Estaba tratando de encontrar cualquier ejemplo bueno y claro de NamedPipeServerStream asíncrono y no pude encontrar ninguno adecuado para mí.

Quiero tener el Servidor NamedPipe, que es aceptar de forma asíncrona los mensajes de los clientes. El cliente es simple y está bien para mí. Pero no puedo encontrar ejemplos de servidor, o no puedo entender cómo funciona.

Ahora, según tengo entendido, necesito crear el objeto NamedPipeServerStream. Hagámoslo:

namedPipeServerStream = new NamedPipeServerStream(PIPENAME, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, BUFFERSIZE, BUFFERSIZE);

Parece funcionar.Pero no sé, ¿tengo que usar PipeSecurity o PipeAccessRule? ¿Yo? Mi servidor funcionará como un servicio de Windows en un sistema local.

¿Qué sigue? Estoy pensando que necesito usar BeginWaitForConnection para conexiones asíncronas. Veamos:

namedPipeServerStream.BeginWaitForConnection(WaitForConnectionAsyncCallback, <some strange thing>);

Pregunta 1: ¿Qué es esto "algo extraño"? ¿Cómo usarlo?

Pregunta 2: Deberia hacer

while(true)
{
namedPipeServerStream.BeginWaitForConnection(WaitForConnectionAsyncCallback, <some strange thing>);
}

¿Para que mi servidor espere siempre las conexiones? O necesito hacerlo de otra manera?

Y luego ... Echemos un vistazo a la función WaitForConnectionAsyncCallback:

private void WaitForConnectionAsyncCallback(IAsyncResult result)
        {
            Console.WriteLine("Client connected.");
            byte[] buff = new byte[BUFFERSIZE];
            namedPipeServerStream.Read(buff, 0, namedPipeServerStream.InBufferSize);
            string recStr = General.Iso88591Encoding.GetString(buff, 0, namedPipeServerStream.InBufferSize);
            Console.WriteLine("   " + recStr);
            namedPipeServerStream.EndWaitForConnection(result);
        }

..Esto no funciona, por supuesto. PorqueNo sé exactamente cómo recibir la cadena de la secuencia. ¿Cómo?&nbsp;Ahora se levanta una InvalidOperationException:

Pipe aún no ha sido conectado.

Entonces, ¿cómo organizar el trabajo asíncrono con NamedPipeServerStream?