Ich habe zwei Windows-Dienste, die erste in C# geschrieben und die zweite in unmanaged C++ geschrieben, möchte ich wissen, wie kann ich Zwei-Wege-Interprozesskommunikation.Interprozesskommunikation zwischen C# -Anwendung und nicht verwalteter C++ - Anwendung
Antwort
Wenn die Interprozesskommunikation immer auf demselben Computer ausgeführt wird, sind Named Pipes der richtige Weg, da sie schneller sind als andere Optionen.
Wenn jedoch die geringste Chance besteht, dass diese Kommunikation irgendwann über die Grenzen der Maschine hinweg stattfindet, sollten Sie den Socket-Ansatz verwenden. Für C++ benötigen Sie die Winsock2.h-Header-Datei. Verwenden Sie in C# den System.Net.Sockets
-Namespace.
Es ist eine Weile her, seit ich unmanaged C++ gemacht habe, aber meine Erinnerung ist, dass Sie weniger C++ Code schreiben müssen, wenn Sie den Server auf der C++ Seite erstellen und dann die TcpClient
Klasse auf der C# Seite verwenden.
Verwenden Sie entweder DCOM/RPC oder Named Pipes - alles andere ist entweder unsicher, hacky oder beides.
Sockets und Named Pipes sind zwei Optionen, die in verwalteten und nicht verwalteten Umgebungen gut unterstützt werden.
Steckdosen sind wahrscheinlich die beste Wahl.
Mit Sockets sind Sie nicht unbedingt an beide Programme gebunden, die sich auf derselben Maschine befinden.
Auch ist es wahrscheinlich die portabelste Option (heck, Windows hat sogar select() für Sockets).
Es gibt eine Reihe von Möglichkeiten, dies zu tun, aber ich denke, dass der beste Weg wäre, WCF und COM + zu verwenden. Wenn Sie einen Dienst in COM + hosten, können Sie auf ihn über WCF in Ihrem .NET-Dienst und über COM-Schnittstellen in Ihrem nicht verwalteten Code zugreifen.
Vielleicht möchten Sie die folgenden Abschnitte der MSDN-Dokumentation überprüfen, um zu beginnen:
Integration von WCF-Diensten mit COM +: http://msdn.microsoft.com/en-us/library/bb735856.aspx
mit COM Integration + Anwendungen Übersicht: http://msdn.microsoft.com/en-us/library/ms734723.aspx
I würde sagen, Steckdosen und ein Messaging-System. Überprüfen Sie unsere für Google Protocol Buffers.
Erstellen Sie ein Singleton-COM-Objekt. Pflegen Sie Daten in diesem COM-Objekt, das von C++ - und C# -Anwendungen gelesen werden kann.
Ich würde sagen, redis wäre die beste Lösung für jede Art von Interprozess-Kommunikation seiner
wie funktioniert ein C++ App dieses Objekt lesen, ohne mit COM bitte? –