myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Objektinstanz zwischen Applikationen "teilen"
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Objektinstanz zwischen Applikationen "teilen"

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
BThomas
myCSharp.de-Mitglied

Dabei seit: 14.08.2019
Beiträge: 4
Herkunft: Frankfurt


BThomas ist offline

Objektinstanz zwischen Applikationen "teilen"

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

Meta:
zunächst einmal, ich treibe mich eigentlich eher mit C/C++ um und bin ein C#/.Net "Noob".
Es tut mir sehr leid wenn die Frage hier im Forum bereits thematisiert wurde, ich habe nichts passendes gefunden und auch im sonstigen Internet suche ich mir einen Wolf, bzw. finde keine funktionierenden Ansätze.

Problem:
Ein Netzwerkgerät (das ich gebastelt habe) soll aus C# angesprochen werden. [EDIT] Es kann sich jeweils nur ein PC mit dem Gerät verbinden und es kann nur eine Verbindung geöffnet werden.

Hierfür habe ich eine Klassenbibliothek als C#.dll geschrieben, welche eine GeräteInterface-Klasse beschreibt.

Es gibt eine WPF Applikation die diese .dll verwendet, das GeräteInterface instantisiert und eine erstes UI bereit stellt. Hier wird letztlich hauptsächlich die Verbindung verwaltet (und in Zukunft noch ein paar Basis-Funktionen).

Mein Ziel ist es jetzt, dass sich weitere WPF Applikationen mit dem ersten UI "verbinden" können und das GeräteInterface nutzen ohne die Verbindung selbst verwalten zu müssen. Läuft die erste UI nicht, müssen die "Client" Applikationen nicht lauffähig sein.


Frage:
Ist COM der richtige Ansatz für mein Problem? Was würdet ihr empfehlen?
Falls COM bereits der richtige Ansatz ist brauche ich etwas Hilfe bei der Umsetzung...
Was muss auf welcher Seite getan werden? Ich habe vieles probiert aber das war mehr trial and error als saubere Programmierung, darum die unspezifische Frage, bin ziemlich verwirrt um ehrlich zu sein....

Schonmal vielen Dank fürs lesen...

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von BThomas am 14.08.2019 14:17.

14.08.2019 13:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 972
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

solange du mittels .NET mit .NET kommunizieren möchtest ist COM eigentlich generell der falsche Weg.

Dein Problem ist mir nicht ganz klar, da du noch nicht preisgegeben hast was das für ein Gerät ist bzw. wie es angesprochen wird.

Grundsätzlich gibt es ja hier die Möglichkeit, dass es entweder nur eine - oder beliebig viele Verbindungen zum Gerät separat hergestellt werden können.

Wenn letzteres zutrifft - besteht grundsätzlich die Möglichkeit ein UserControl zu erstellen, dass in anderen WPF-Projekten verwendet werden könnte. Falls jedoch ersteres der Fall ist - musst du dir etwas ausdenken - dann würdest du nämlich ggf. einen Service schreiben, der widerum über ein weiteres Projekt via UserControl gesteuert werden werden kann. (Inter Process Communication wäre dann hier ein guter Startpunkt)

LG
14.08.2019 13:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BThomas
myCSharp.de-Mitglied

Dabei seit: 14.08.2019
Beiträge: 4
Herkunft: Frankfurt

Themenstarter Thema begonnen von BThomas

BThomas ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Taipi88,

bei dem Gerät handelt sich um einen WIFI Mikrocontroller der in einem "Roboter" verbaut ist.

Es kann sich jeweils nur ein PC mit dem dem Roboter verbinden und mit ihm kommunizieren.

Im Basis-UI wird die Verbindung mit dem Roboter hergestellt und die Low-Level Schnittstellen des Roboters können direkt angesprochen werden. In den "externen" Applikationen (die sich mit dem Basis-UI verbinden) finden sich dann komplexere Anwendungen die die Abstraktion der Basis-UI nutzen. Modularität steht hier klar im Vordergrund.

Service würde bedeuten dass das Interface im Hintergrund aktiv ist und sich die verschiedenen UIs sich dann alle mit der gleichen Instanz verbinden?
14.08.2019 14:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
FrankenDerStein FrankenDerStein ist männlich
myCSharp.de-Mitglied

avatar-4129.gif


Dabei seit: 18.06.2015
Beiträge: 42
Entwicklungsumgebung: Visual Studio Ultimate 2013
Herkunft: Deutschland


FrankenDerStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo BThomas,

Ich bin zufällig auf dein Thema gestoßen.

Wenn ich das richtig verstehe, geht es hier um die Kommunikation zwischen 2 getrennten Programmen.

Ein Programm ist mit dem Roboter verbunden und das andere Programm stellt die GUI.

Falls ich das richtig verstehe, wäre eine Kommunikation (wie mir erklärt wurde) über gRPC die beste Möglichkeit.

Mit freundlichen Grüßen, FankenDerStein.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von FrankenDerStein am 14.08.2019 14:37.

14.08.2019 14:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BThomas
myCSharp.de-Mitglied

Dabei seit: 14.08.2019
Beiträge: 4
Herkunft: Frankfurt

Themenstarter Thema begonnen von BThomas

BThomas ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo FrankenDerStein,

ja, so kann man es in etwa sehen (beide Apps habe ein GUI).

Ich gucke mir gRPC mal an.

Danke für den Tipp.
14.08.2019 14:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 972
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

wenn ich so drüber nachdenke ist in deinem Fall eigentlich kein wirklicher Service / separates Programm nötig wenn man's einfach halten möchte.

Grundlegend wäre es denkbar, dass du z.B. Folgendes machst:
a) Eine Library, die bei Verbindungsaufbau mit dem Roboter einen Mutex belegt
(Damit unterbindest du letztlich mehrfachen Verbindungsaufbau vom selben Rechner mit
mit deiner Library)
b) Eine Library mit einem WPF-UserControl, dass vorgenannte Library verwendet (einfach per Referenz)
c) Beliebig viele WPF-Programme, die auf vorgenannte Library verweisen und das UserControl zum Verbindungsaufbau nutzen (wobei ich persönlich wohl b) auslassen würde, da man doch je Anwendung eigentlich auch ein anderes Design hat)

Falls mehrere Programme gleichzeitig kommunizieren können sollten (was teils sicherlich sinnvoll sein kann) - wäre gRPC eine gangbare Lösung zur Kommunikation der Anwendungen untereinander.

Edit: UserControl und Service würde ich generell in separaten Libraries/Projekten halten. Man bindet sich nicht eine bestimmte UI ;-)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Taipi88 am 14.08.2019 14:24.

14.08.2019 14:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BThomas
myCSharp.de-Mitglied

Dabei seit: 14.08.2019
Beiträge: 4
Herkunft: Frankfurt

Themenstarter Thema begonnen von BThomas

BThomas ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

ich wollte nur mitteilen wie ich es jetzt gelöst haben.

RPC wäre der overkill für mich gewesen. Ich habe eine Master-Applikation die sich mit dem Roboter verbindet und die Client-Applikationen verbindet sich via TCP mit dem Master. Dort habe ich ein einfaches Protokoll definiert. Das finde ich sauberer.

Danke für eure Hilfe!
10.09.2019 12:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.070
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Als Feedback: das ist totaler Käse.

Was Du Dir da gebastelt hast ist quasi das Rad neu zu erfinden, statt auf fertige Architekturen/Komponenten zu setzen.
Da Du das ganze so vermutlich auch nicht mit dem Hauch einer Security implementiert hast, ist das ganze dazu auch noch unsicher, nicht erweiterbar und komplett proprietär.

Hättest gRPC genommen, hätteste was ordentliches mit Zukunft gehabt und das Ganze vermutlich auch noch mit weniger Code umsetzbar gewesen.
Aber ja: leider muss man sich mit neuen Dingen manchmal einfach beschäftigen.

Für so eine lapidare Sache was eigenes zu basteln: das ist overkill (und fahrlässig).
10.09.2019 14:21 Beiträge des Benutzers | zu Buddylist hinzufügen
M.L.
myCSharp.de-Mitglied

Dabei seit: 26.09.2006
Beiträge: 193
Entwicklungsumgebung: VS Community '19


M.L. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

11.09.2019 08:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
M.L.
myCSharp.de-Mitglied

Dabei seit: 26.09.2006
Beiträge: 193
Entwicklungsumgebung: VS Community '19


M.L. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Ich gucke mir gRPC mal an.

Die druckfrische Ausgabe des DNC-Magazins behandelt gRPC i.Z. mit ASP .NET Core 3.0:  DNC - Ausgabe 44 (pdf)
27.09.2019 09:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 19.10.2019 11:18