Ich sehe mir ein Projekt an, das die Kommunikation zwischen einer alten Windows-Anwendung mit Named Pipes und einem neuen Dienst auf einem Linux-Server erfordert. Die Windows-Anwendung kann nicht geändert werden. Weiß jemand, ob es eine Linux-Bibliothek gibt, die Windows Named Pipes unterstützt? Oder noch besser, kann jemand eine Bibliothek empfehlen, die sie für diesen Zweck verwendet haben?Unterstützung für Windows-Named Pipes in Linux
Antwort
Windows und Linux Named Pipes sind verschiedene Tiere. Wenn eine Interop-Lösung existiert, gehören Sie zu einer sehr kleinen Anzahl von Benutzern.
Sie könnten besser einen Proxy auf der Windows-Seite schreiben, um zwischen Named Pipe und Socket zu mappen und dies mit einem Socket auf dem Linux-Ende zu verbinden. Dies bietet Ihnen eine nützliche Netzwerkschnittstelle auf der Linux-Seite, die vorwärts geht, und entfernt, was möglicherweise eine Welt von Named Pipes-Interop-Verletzungen vom Bild sein könnte.
Wenn ich dies tat, würde ich versuchen, einen einfachen Passthrough-Proxy in C# (Managed Code) als ein Beweis des Konzepts zu produzieren. Kann immer in nativen Code (Win32/C++) konvertiert werden, wenn der Durchsatz nicht ausreicht. Es gibt einige Beispiel-C# -Code here, die eine nützliche Referenz sein können.
Hier ist background on the nuances of Windows vs Linux named pipes.
Danke. die Idee, einen Proxy auf der Windows-Seite zu schreiben, war mir eingefallen, aber ich stoße auf die Idee, alles auf dem Windows-Server zu installieren ... – MichaelB76
@ MichaelB76 - wie frustrierend ... hoffentlich eine gut argumentierte Präsentation von Risiken und Kosten bei NP Interop können das Argument für Sie schwingen. Was ist das Windows Betriebssystem? Eine Maschine oder viele? –
Ich wette, Samba/Winbind enthält sehr relevanten Code. Nicht sicher, wie wiederverwendbar es ist.
Ich denke, die Samba-Suite enthält etwas Nützliches; nicht sicher, wie man es benutzt. Einige der Samba-Tools müssen intern mit NT-Named Pipes verbunden sein. – MarkR
Danke, interessanter Gedanke. – MichaelB76
Eine Pipe ist ein lokales Kommunikationssystem, sie erweitert sich nicht auf Netzwerke ... Wie sollte also ein Linux-System Zugang zu einer Pipe auf einem Windows-System erhalten, das definitionsgemäß ein anderes System (sogar eine VM) sein muss? Oder möchten Sie wissen, wie man einen Proxy oder etwas Ähnliches schreibt? – DarkDust
@DarkDust: Windows Named Pipes werden über den Netzwerknamenraum exportiert. Sie können eine von einer anderen Windows-Maschine mit den korrekten Sicherheitsattributen öffnen und den Pipe-Namen mit dem WINS-Namen voranstellen. –
Windows benannte Pipes funktionieren anders als die Standard-Linux-Pipes und funktionieren über ein Netzwerk hinweg. Ich frage, ob jemand eine Bibliothek in Linux geschrieben hat, um Windows Named Pipes zu unterstützen. – MichaelB76