C #: compreensão de NamedPipeServerStream assíncrona

Eu estava tentando encontrar um bom e claro exemplo de NamedPipeServerStream assíncrono e não consegui encontrar nenhum adequado para mim.

Eu quero ter NamedPipe Server, que é assincronamente aceitar mensagens de clientes. O cliente é simples e está bem para mim. Mas não consigo encontrar exemplos de servidor ou não consigo entender como ele funciona.

Agora, eu entendo que preciso criar o objeto NamedPipeServerStream. Vamos fazer isso:

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

Parece funcionar.Mas eu não sei, eu tenho que usar PipeSecurity ou PipeAccessRule? Eu faço? Meu servidor funcionará como um serviço do Windows em um sistema local.

Qual o proximo? Eu estou pensando que preciso usar BeginWaitForConnection para conexões assíncronas. Vamos ver:

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

Questão 1: O que é isso "alguma coisa estranha"? Como usá-lo?

Questão 2: Eu deveria fazer

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

Para fazer meu servidor sempre esperar por conexões? Ou eu preciso fazer isso de alguma forma mais?

E então ... Vamos dar uma olhada na função 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);
        }

..Isso não funciona, é claro. PorqueEu não sei exatamente como receber string do stream. Como? Agora ele gera um InvalidOperationException:

O tubo ainda não foi conectado.

Então, como organizar o trabalho assíncrono com NamedPipeServerStream?

questionAnswers(1)

yourAnswerToTheQuestion