C #: Asynchronous NamedPipeServerStream-Verständnis

Ich habe versucht, ein gutes und klares Beispiel für asynchronen NamedPipeServerStream zu finden, und konnte kein passendes für mich finden.

Ich möchte einen NamedPipe-Server haben, der asynchron Nachrichten von Clients akzeptiert. Der Kunde ist einfach und es ist in Ordnung für mich. Aber ich kann keine Beispiele für Server finden oder nicht verstehen, wie es funktioniert.

Soweit ich weiß, muss ich ein NamedPipeServerStream-Objekt erstellen. Lass uns das machen:

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

Scheint zu funktionieren.Aber ich weiß nicht, muss ich überhaupt PipeSecurity oder PipeAccessRule verwenden? Mache ich Mein Server arbeitet als Windows-Dienst in einem lokalen System.

Was als nächstes? Ich denke, ich muss BeginWaitForConnection für asynchrone Verbindungen verwenden. Mal schauen:

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

Frage 1: Was ist das für eine "seltsame Sache"? Wie benutzt man es?

Frage 2: Soll ich tun

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

Damit mein Server immer auf Verbindungen wartet? Oder muss ich es irgendwie anders machen?

Und dann ... Sehen wir uns die WaitForConnectionAsyncCallback-Funktion an:

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);
        }

..Das funktioniert natürlich nicht. weilIch weiß nicht genau, wie ich eine Zeichenfolge vom Stream empfangen soll. Wie? Jetzt wird eine InvalidOperationException ausgelöst:

Pipe wurde noch nicht verbunden.

So organisieren Sie asynchrone Arbeit mit NamedPipeServerStream?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage