Was ist der beste Weg, um Daten von einem Windows Forms app (ein Office-Plugin) zu einem anderen (exe in C# geschrieben) in C# übergeben?
Antworten
Zu viele Anzeigen?Ich wage mal die Behauptung, dass Sie wahrscheinlich wollen, dass die Office-Anwendung nach Hause telefonieren zu Ihrer Exe? In diesem Zusammenhang ist die "exe" der Server und die Office-Anwendung der Client.
Wenn Sie .NET 3.0 verwenden, ist WCF wahrscheinlich Ihre beste Wahl. Ich würde die Lösung in drei Teile gliedern:
- "Gemeinsame Verträge". Dies sind Schnittstellen, die Ihre Dienste beschreiben. Wenn Sie benutzerdefinierte Datenobjekte haben, die zwischen den Anwendungen weitergegeben werden sollen, sollten diese ebenfalls in dieser Baugruppe definiert werden. Diese Baugruppe wird von Client und Server gemeinsam genutzt. Siehe " Gestaltung von Dienstleistungsverträgen " für weitere Informationen.
- "Dienst". Diese Assembly ist Ihre "exe", die auf die Verträge verweist und die Klassen auf der Grundlage Ihrer Serviceverträge definiert. Ihre Anwendung wird auch einen ServiceClient für Ihren Dienst hosten. In der Konfigurationsdatei für diese Anwendung wird festgelegt, wie Ihr ServiceClient dem Client zur Verfügung gestellt wird (als Webservice, tcp, usw.). Siehe " Implementierung von Serviceverträgen " für weitere Informationen.
- "Kunde". Ihr Plugin verweist auf die Baugruppe "Shared Contracts" und enthält Service-Clients, die auf den Verträgen basieren. Der Client kann mit dem Tool svcutil.exe automatisch generiert werden.
Sowohl die "exe" als auch das "Plugin" benötigen Konfigurationsdateien, in denen die Bindungen definiert sind.
Wenn Sie Daten zwischen Client und Server übertragen wollen, erstellt Ihr Client ein Objekt aus der Baugruppe "Shared Contracts" und übergibt es an den Service-Client. Die Konfigurationsdatei des Clients findet heraus, wohin die Daten zu senden sind.
Für eine schrittweise Anleitung zur Erstellung eines einfachen WCF-Dienstes, siehe dieses Tutorial .
Jawohl. WCF ist der richtige Weg. Ich empfehle, iDesign.net zu besuchen, um die Klasse InProcFactory zu verwenden. Sie können Ihre Office-Klasse in einen Dienst umwandeln und Ihre andere Anwendung, die einen Dienst hostet, aufrufen. Der andere Dienst kann dann zurück in die Office-basierten Dienst aufrufen.
Sie können einen IPC-Endpunkt verwenden, der die Kommunikation beschleunigt.
-Scott
WCF ist eine der einfachsten Möglichkeiten, dies zu tun. Sie können in jeder Anwendung einen Dienstendpunkt registrieren, oder wenn eine Anwendung der Dienst und eine andere der Client ist, können Sie nur einen einzigen Diensthost verwenden.
Altmodisch, aber es funktioniert - Verwendung von WM_COPYDATA zum Senden von Nachrichten zwischen Windows-Anwendungen