In unserer Anwendung (ein Dokumenten-Management-System) sollen wir über Bildschirmänderungen informiert werden (oder das andere Programm von Bildschirmänderungen benachrichtigen), um die beiden Anwendungen gleich aussehen zu lassen Daten, von denen eine die Auftragserfüllungs-App ist, die andere der Dokumentenbetrachter des ursprünglichen Faxes. Die Fulfillment-App ist in vb6 geschrieben und der Dokumentenmanager ist in .net 3.5 (C#). Es läuft auf einem Terminalserver, so dass es auch sessionfähig sein muss. Der Dokument-Viewer oder die Fulfillment-App kann zuerst geöffnet werden und beide können ohne den anderen verwendet werden. Was wäre die beste Methode von IPC?Beste IPC für VB6 und. NET-Anwendung
Antwort
Wenn Sie unter Vista oder Windows 7 laufen wollen, ist die beste Form von IPC TCP (was sehr einfach von VB6 mit dem Winsock-Steuerelement gemacht wird).
Der Vorteil davon ist, dass zwei Anwendungen kommunizieren können, auch wenn sie nicht als derselbe Benutzer ausgeführt werden, sie können kommunizieren (das können Sie nicht mit SendMessage oder Named Pipes unter Vista + tun). Das Einzige, an das Sie sich erinnern müssen, ist eine Regel in der Firewall, damit sie nicht blockiert wird. Dies kann mit in Ihrem Installateur durchgeführt werden:
netsh.exe firewall set allowedprogram "{PROGRAM PATH}" "{PROGRAM NAME}" enable
Kris Antwort ist wahrscheinlich immer noch die beste Wette, aber Sie müßten wahrscheinlich eine Flickschusterei geistige Gesundheit mit Terminal-Server zu erhalten.
In der Anwendung, die Sie als "Server" -Anwendung verwenden möchten, können Sie einen nicht verwendeten Anschluss öffnen und ihn für die Eingabe in der "Client" -App anzeigen. Vielleicht sogar Umgebungsvariablen verwenden. Je nach Ihren Bedürfnissen könnte dieser Ansatz falsch sein.
Wenn Sie einfach zwei Apps haben, von denen eine benachrichtigt werden muss, wenn sich die andere ändert (und nicht darüber informiert wird, was sich tatsächlich geändert hat), könnten Sie wahrscheinlich Windows-Nachrichten senden und einhängen.
Named Pipes und Mailslots sind immer noch einige der besten verfügbaren Optionen, und sie arbeiten sowohl benutzer- als auch prozessübergreifend. Natürlich gibt es in Vista + Probleme mit Prozessen, die auf verschiedenen Integritätsebenen ausgeführt werden, und Sicherheit gilt auch für frühere Betriebssysteme - ähnlich wie Dateisicherheit.
TCP ist immer deutlich langsamer in der gleichen Maschine, wahrscheinlich sogar schlimmer als WM_COPYDATA über Prozesse hinweg.
Mithilfe von Pipes oder Mailslots können Sie Terminaldienste verarbeiten, indem Sie die Sitzungs-ID als Teil des Namens angeben. TCP wird immer durch seinen begrenzten "Namespace" von Portnummern herausgefordert (stellen Sie sich eine Festplatte vor, die nur Dateien mit den Namen 0 bis 65535 haben kann - und jede Verbindung erfordert ZWEI Portnummern).
Das Problem damit ist auch sein Vorteil. Ich verwende viele Instanzen jeder Anwendung auf einem Terminalserver, wie in mehreren möglichen Sitzungen für einen einzelnen Benutzer. Daher kann ich nicht etwas verwenden, das nicht sessionbewusst ist. –