2017-12-19 6 views
0

Ich habe Schwierigkeiten, IPC-Anwendung in .Net zu entwickeln. Ich habe bereits eine Anwendung mit .Net geschrieben, aber meine Implementierungsumgebung ist Ubuntu, also schreibe ich meinen .net Code in .net core um. In ubuntu kann ich [DllImport("kernel32.dll", SetLastError = true)] nicht schreiben, also fand ich einen Mechanismus Rohre. Ich habe Schwierigkeiten, Pipes in meinem bestehenden Code zu implementieren. Derzeit Ich schaffe Rohr alsWie werden Named Pipes in C# implementiert?

[DllImport("kernel32.dll", SetLastError = true)] 
public static extern SafeFileHandle CreateNamedPipe(
    String pipeName, 
    uint dwOpenMode, 
    uint dwPipeMode, 
    uint nMaxInstances, 
    uint nOutBufferSize, 
    uint nInBufferSize, 
    uint nDefaultTimeOut, 
    IntPtr lpSecurityAttributes); 

ich dies unter Verwendung der in Methode listenforclients als

clientHandle =CreateNamedPipe(this.pipeName,DUPLEX | FILE_FLAG_OVERLAPPED,0,255,BUFFER_SIZE,BUFFER_SIZE,0,IntPtr.Zero);` 

habe ich versucht, diese

NamedPipeServerStream pipeServer = new NamedPipeServerStream("_PipeName",PipeDirection.InOut,2,PipeTransmissionMode.Message,PipeOptions.None); 
clientHandle = pipeServer(this.pipeName, DUPLEX | FILE_FLAG_OVERLAPPED, 0, 255, BUFFER_SIZE, BUFFER_SIZE, 0, IntPtr.Zero); 

Dies Fehler pipeserver Ergebnisse nicht wie Verfahren verwendet werden. Kann jemand mir helfen, die richtige Methode für das oben genannte zu schreiben? Jede Hilfe würde sehr geschätzt werden. Vielen Dank.

Antwort

0

pipeServer ist ein Stream. Sie können es nicht als Methode bezeichnen. Sie müssen es so serialisiert werden:

pipeServer.WaitForConnection(); 
Serializer.Serialize(pipeServer, ...); 
pipeServer.Disconnect(); 

Sie sehen here ein Beispiel kann.

Das Beispiel verwendet ProtoBuf. Der Serializer kommt von dort. Sie müssen die Klassen dekorieren, die Sie serialisieren möchten.

+0

Vielen Dank für Ihre Hilfe. Serializer existiert nicht im Kontext ist der erste Fehler, den ich bekomme. weiter statt ... was soll ich schreiben? Auch ich habe int Erfolg = ConnectNamedPipe (clientHandle, IntPtr.Zero); Was soll ich an diesem Ort schreiben? –

+0

@Niranjan Godbole: Ich fügte der Antwort weitere Informationen hinzu. Es ist ein Weg, Named Pipe-Kommunikation zu machen, aber ich kann nicht wirklich sagen, ob es für Ihr Beispiel richtig ist. –

+0

Danke für Ihre Hilfe. Ich werde etwas anderes sehen –